Quine (programování)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 3. února 2021; kontroly vyžadují 2 úpravy .

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 . 

Historie

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 %ENDOFPROGRAMU

Variace

Quine n -tého řádu

Quine 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ěz Quine

Ř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] .

Jiné variace

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.

Viz také

Poznámky

  1. Yusuke Endo řetězí zdrojový kód chininu . Datum přístupu: 19. července 2013. Archivováno z originálu 21. srpna 2013.

Literatura