Quine ( quine , anglicky quine ) je počítačový program , který vydává přesnou kopii svého zdrojového textu . Programy, které používají externí data (čtení textu programu ze souboru, jeho zadávání z klávesnice atd.), se přitom nepovažují za quiny. Navíc "program", který neobsahuje vůbec žádný kód (degenerovaný případ), není považován za quinu.
V knize " Etudes for Programmers " od Charlese Weatherella je formulována přísnější podmínka: program nesmí používat triky, které umožňují přístup k jeho zdrojovému kódu uloženému v paměti zavaděče nebo interpretu. Quines 10 LISTv BASICu a ve ForthSOURCE TYPE jazyce proto nejsou zcela upřímní.
Termín byl pojmenován po americkém logikovi a filozofovi Willardu Van Orman Quine (1908-2000 ) , který se zabýval hloubkovou studií nepřímé sebereference .
Quines jsou možné v jakémkoli Turingově úplném programovacím jazyce - jako důsledek Kleeneovy věty o rekurzi . Myšlenku Quine poprvé popsali Paul Bratley ( Ing. Bratley, Paul ) a Jean Millo ( Eng. Millo, Jean ) v «Computer Recreations; Self-Reproducing Automata, Software - Practice & Experience, Issue 2 (1972), s. 397-400. Bratley se začal zajímat o samoreprodukující se programy poté, co viděl první takový program napsaný v programovacím jazyce Atlas Autocode v Edinburghu v 60. letech 20. století učitelem a výzkumníkem Hamishem Dewarem .
Zde je zdrojový kód tohoto programu:
%ZAČÍT !JEDNÁ SE O SEBE REPRODUKČNÍ PROGRAM %ROUTINESPEC R R TISKNOUT SYMBOL(39) R TISKNOUT SYMBOL(39) NOVÝ ŘÁDEK %CAPTION %END~ %CAPTION %ENDOFPROGRAMU~ %RUTINER %PRINTTEXT ' %ZAČÍT !JEDNÁ SE O SEBE REPRODUKČNÍ PROGRAM %ROUTINESPEC R R TISKNOUT SYMBOL(39) R TISKNOUT SYMBOL(39) NOVÝ ŘÁDEK %CAPTION %END~ %CAPTION %ENDOFPROGRAMU~ %RUTINER %PRINTTEXT ' %KONEC %ENDOFPROGRAMUQuine n-tého řádu pro je program, který zobrazuje kód tak, že spuštění kódu zobrazí kód . V tomto případě kód zobrazí na obrazovce kód původního programu.
Řetězová quine pro seznam programovacích jazyků je takový kód v jazyce , že když jsou postupně spuštěny všechny kódy, kód v jazyce vydá libovolný kód v jazyce . Současně kód v jazyce vygenerovaném jako výsledek kroků zobrazuje původní kód v jazyce .
Japonský programátor Yusuke Endo v roce 2013 vytvořil řetězový quin pro spouštění v programovacím jazyce Ruby (avšak podle definice, vzhledem k cyklické povaze algoritmu, pokud existují kódy ve všech jazycích, můžete spustit provádění cyklus od kteréhokoli z nich). Programovací jazyky v Quine jsou uspořádány v abecedním pořadí. Do roku 2018 zvýšil počet jazyků v této Quine na 128 [1] .
Yusuke Endo také vytvořil pseudoquin v Ruby, který zobrazuje svůj text pomocí pseudoanimace (kreslení nových kombinací znaků na konzoli v daném intervalu).
Také Tupperův autoreferenční vzorec lze považovat za druh matematické variace Quine - nerovnost, jejíž pravdivostní body v určité oblasti roviny kreslí stejný vzorec.