На 29-м Международном конкурсе обфусцированного кода на C (International Obfuscated C Code Contest, IOCCC) приз Ping Pong Prize получил разработчик под ником Уэлленберг (Uellenberg) — за версию Pong, которая перекомпилирует собственный исходный код на каждом кадре. Каждый запуск программы печатает исходный код на C для следующего кадра, причём текущее состояние игры и картинка «зашиты» прямо внутрь этого кода. Скомпилировать и запустить полученный вывод — значит продвинуть игру на один шаг. Любопытно, что сам запутанный код автор не писал: он написал чистый, прокомментированный исходник на собственном языке программирования Insert, а уже его компилятор сгенерировал тот самый обфусцированный C, который и взял награду.

Pong, перекомпилирующий собственный исходный код на каждом кадреИсточник изображения - @timClicks via X.com

Сегодня в рубрике «проклятый код»: программа, которая играет в понг, модифицируя собственный исходный код. (Каждый кадр — это новая компиляция.) — @timClicks, 26 июня 2026

Квайн, который переписывает сам себя

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

Язык Insert и почему «это не обфускация»

Компилятор Insert (написан на Rust) транслирует код в C и выполняет оптимизации, типичные для промышленных компиляторов: анализ времени жизни переменных и удаление мёртвого кода, свёртку констант, а также слияние переменных, когда один слот переиспользуется под множество значений. Затем повторяющиеся последовательности токенов сворачиваются в макросы препроцессора ради сокращения размера. В заметках к работе автор подчёркивает, что выигравший код «на самом деле не обфусцирован. Никогда им не был» — это побочный продукт работы компилятора, а не ручная запутка. По его словам, оптимизация и обфускация нередко сходятся в одной точке: итоговый листинг выглядит как стена односимвольных идентификаторов и массив данных, в котором перемешаны константы и изменяемые значения.

Сначала Pong, потом раннер

Игрок управляет правой ракеткой, передавая «w» или «e» аргументом командной строки, и играет против компьютерного соперника. Победа над компьютером переключает программу во вторую игру — бесконечный раннер в духе того самого «динозаврика» из браузера Chrome, который появляется при отсутствии интернета. Пройдите и его — программа вернёт вас обратно к Pong.

О самом конкурсе

IOCCC проводится с 1984 года под руководством Лэндона Курта Нолла и публикуется под лицензией Creative Commons; его называют одним из самых долгоживущих конкурсов в интернете — в этом году ему исполнилось 42 года. IOCCC29 стал вторым конкурсом после четырёхлетнего перерыва (2020–2024). Итоги подвели 6 июня на трёхчасовой трансляции в YouTube, где объявили 22 работы-победителя, после чего исходники выложили в репозиторий конкурса на GitHub.

Три награды в этом году забрал Юсукэ Эндо — именно его самомодифицирующиеся квайны Уэлленберг называет причиной, по которой сам взялся за этот жанр. Среди других заметных работ — эмулятор Game Boy, исходник которого по форме напоминает саму консоль, квазирогалик с призом «вероятнее всего телепортирует» и компьютер на архитектуре Subleq. Pong удостоился отдельной ремарки жюри: участников попросили в следующий раз воздержаться от создания «Квайн-Doom».

Работа встаёт в один ряд с другими недавними экспериментами, выжимающими полноценные системы из неожиданных материалов, — среди них эмулятор процессора x86, целиком написанный на CSS, и играбельная сборка Doom на чистом SQL. Открыть IOCCC30 организаторы планируют ближе к концу 2026 года.