Как программа печатает саму себя

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

Код, который содержит рецепт себя

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

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

Зачем это придумано

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

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