В игре «Pong» исходный код перекомпилируется каждый кадр

Ioccc C квайн компилятор запутывание tomshardware.com

Джона Уэлленберг выиграл Приз по Пинг-Понгу на 29-м Международном конкурсе запутанного кода на C, представив версию Pong, которая перекомпилирует свой исходный код на каждом кадре.

Джона Уэлленберг завоевал Приз по Пинг-Понгу на 29-м Международном конкурсе запутанного кода на C в начале этого месяца, представив версию Pong, которая перекомпилирует собственный исходный код на каждом кадре. Каждый запуск программы выводит исходный код на C для следующего кадра, включая в него текущее отображение и состояние игры, так что компиляция и запуск этого вывода продвигают игру на один шаг. Как ни парадоксально, Уэлленберг не писал запутанный код сам; вместо этого он написал чистый, прокомментированный исходный код на созданном им языке программирования под названием Insert, компилятор которого сгенерировал запутанный C, получивший награду. В своих заметках к работе Уэлленберг пишет, что выигрышный код «на самом деле не запутан. Он никогда им не был», подчеркивая, что это результат работы компилятора, а не что-либо искаженное вручную. Компилятор Insert нацелен на C и выполняет проходы оптимизации размера, которые сделал бы производственный компилятор, такие как анализ живости для удаления мертвого кода, свертка констант и проход слияния переменных, который повторно использует один слот переменной для нескольких значений. Повторяющиеся последовательности токенов затем упаковываются в определения препроцессора C, чтобы сэкономить байты. По его словам, оптимизация и запутывание имеют тенденцию сводиться к одному и тому же результату, поэтому результат выглядит как стена односимвольных идентификаторов и массив данных, смешивающий константные и изменяемые значения. Квайн — это программа, которая выводит свой собственный исходный код при запуске. Версия Уэлленберга выводит измененную копию себя: исходный код для следующего кадра с внедренным обновленным состоянием игры. Запустите его, и он выведет следующий кадр, и так далее. Игрок перемещает правую ракетку, передавая «w» или «e» в качестве аргумента командной строки, соревнуется с компьютерным противником и запускает прилагаемый скрипт, который автоматизирует цикл компиляции и запуска, чтобы матч шел в реальном времени. Победа над компьютером переключает программу на вторую игру — сайд-скроллер-прыгун, смоделированный по образцу бегуна-динозавра из Chrome, а прохождение этой игры переключает ее обратно. IOCCC29 — второй конкурс после того, как организаторы возобновили его после четырехлетнего перерыва с 2020 по 2024 год. Победители 2025 года были объявлены в прямом эфире на YouTube 6 июня, после чего исходный код был размещен в репозитории конкурса на GitHub. Юсукэ Эндо, чьи самомодифицирующиеся кваины Уэлленберг считает причиной, по которой он начал их писать, получил три награды в этом году. Конкурс, проводимый с 1984 года Лэндоном Кертом Ноллом и публикуемый под лицензией Creative Commons, получил от судей примечание к работе о Pong с просьбой к участникам воздержаться от создания «Квайн-Судного дня» в следующем году. Эта работа стоит в ряду других недавних достижений, извлекающих полноценные системы из маловероятных материалов, включая эмулятор ЦП x86, написанный полностью на CSS, и игровую сборку Doom, отрисованную на чистом SQL. Судьи планируют открыть IOCCC30 в конце 2026 года.

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

В тренде:


Похожие новости: