September 2nd, 2012

Искусство дебага

Прошлая статья была попыткой показать, на что похож геймдизайн в геймдеве. Эта статья — попытка показать, на что в простейшем, однотредном случае похож дебаг в геймдеве :)

Жил-был мальчик... скажем, Полуэкт. И он очень любил теорию типов. Сядет на завалинку и начнет читать новые работы Одерского. Так и в этот раз, прочитал он статью про four-colored type inference и решил посчитать, сколько типов надо ввести, чтобы запрограммировать робота, вкручивающего лампочки. Сел он было писать расчет на своей любимой Agda, но не осилил доказательство тотальности и взялся за C++. Написал код, приведенный под катом, а он ему выводит ту последовательность, но не так и не один раз, а потом вообще вылетает. Помогите Полуэкту понять, что же произошло, и какой один символ достаточно исправить. У него Visual Studio 2010 и Windows XP SP3 x86-32, конфигурация Debug.



Вряд ли в других условиях можно повторить такой эффект, не меняя кода, поэтому если будет совсем уж тяжко воспроизвести, я подскажу, что надо заменить, чтобы работало железобетонно на любой винде и конфигурации.

Collapse )

UPD: Сделал gcc счастливым. Работает не так, как в VS, но компилируется.
UPD2: В память о.
UPD3: Решено! _denplusplus_ совершенно верно указал, какой один символ достаточно исправить, чтобы программа начала работать верно.

Collapse )