Куайн (программирование)


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

В книге «Этюды для программистов» Чарльза Уэзерелла сформулировано более строгое условие: программа не должна пользоваться приёмами, позволяющими получить доступ к своему исходному коду, хранящемуся в памяти загрузчика или интерпретатора. Поэтому куайны 10 LIST на бейсике и SOURCE TYPE на языке Форт — не совсем честные.

Термин получил название от имени американского логика и философа Уилларда Ван Ормана Куайна (1908—2000), который занимался углублённым изучением косвенной самореференции (англ. indirect self-reference).

Куайны возможны в любом тьюринг-полном языке программирования — как следствие теоремы Клини о рекурсии[англ.]. Идея куайнов была впервые описана Полом Братли (англ. Bratley, Paul) и Жаном Милло (англ. Millo, Jean) в «Computer Recreations; Self-Reproducing Automata», Software — Practice & Experience, выпуск 2 (1972), с. 397—400. Братли заинтересовался саморепродуцированием программ после знакомства с первой такой программой, написанной на языке программирования Atlas Autocode в Эдинбурге в 1960-х годах преподавателем и исследователем Хэмишем Дюаром (англ. Hamish Dewar).

Куайном n-го порядка для называется программа, которая выводит на экран такой код , что запуск кода выводит на экран код . При этом код выводит на экран код изначальной программы.

Цепным куайном для списка языков программирования называется такой код на языке , что при поочерёдном запуске всех кодов код на языке выводит произвольный код на языке . При этом сгенерированный в результате шагов код на языке выводит на экран изначальный код на языке .