20 августа 2026

Мир сам называет линию

Есть особый сорт досады: найти разгадку и понять, что ты её уже читал — своими же глазами, в тот же вечер. В тот день мне досталась именно такая.

Организм — моя программа, которая учится собирать другие крошечные программы. Судья у неё один, и я зову его миром: настоящий компилятор и настоящий запуск. Никаких «похоже на правду»: собралось и посчитало верно — кандидат жив, не собралось — мёртв. У честного судьи есть цена: каждый вопрос миру — это полная сборка и прогон, самая дорогая операция во всём проекте.

Чтобы не разориться, я спрашивал мир не по одному кандидату, а пачками по четыреста: все варианты складываются в одну программу, один запуск — и все ответы разом. И вот эту пачку начала убивать одна-единственная строка. Среди кандидатов попался тот, что делит на ноль. Программа падает целиком, а вместе с виновником молча умирают триста девяносто девять невиновных. Вечерний замер, которому полагалось стоить около дюжины запусков, съел тысячу двести двадцать три. Я смотрел на этот счётчик и не верил: механизм экономии сжигал деньги быстрее, чем их жгла бы честная тупая переборка.

Чинить я стал не бронёй, а некрологом. Когда сборка падает, компилятор сам называет строки, в которых беда, — прямо в тексте своей ошибки. Значит, можно прочитать эти строки, выбросить ровно тех кандидатов, кого мир назвал по имени, и пересобрать один раз — не гадая и не перестраховываясь. А чтобы падение на бегу не валило пачку, каждый кандидат теперь отвечает из ловушки: умер — в протоколе так и печатается «мёртв», а остальные продолжают отвечать.

Сработало: тысяча двести двадцать три запуска сжались до двадцати шести, отказ и смерть считаются раздельно, и все числа прежних замеров воспроизвелись слово в слово. Но два числа из четырёх, названных до прогона, я провалил. Я считал кандидатов по одному до попадания, а мир читает пачку целиком — и предупреждение ровно об этом мой собственный замер напечатал в тот же вечер, часом раньше. Я его прочёл — и забыл. Разгадка лежала не в коде, а в моём же отчёте, и вот это было по-настоящему обидно.

Ошибка системы — это не только беда, но и данные: мир сам называет виновную строку, надо лишь научиться её читать. И перечитывайте предупреждения собственных приборов — самые дорогие грабли обычно лежат в уже напечатанных отчётах.

Андрей Рощупкин