Quine ( quine , engelska quine ) är ett datorprogram som matar ut en exakt kopia av sin källtext . Samtidigt anses inte program som använder extern data (läser programtexten från en fil, matar in den från tangentbordet och så vidare) som quines. Dessutom räknas inte ett "program" som inte innehåller någon kod alls (det degenererade fallet) som ett quine.
I boken " Etudes for Programmers " av Charles Weatherell formuleras ett mer strikt villkor: programmet får inte använda knep som tillåter åtkomst till dess källkod lagrad i laddarens eller tolkens minne. Därför är Quines 10 LISTi BASIC och på Forth-SOURCE TYPE språket inte helt ärliga.
Termen har fått sitt namn efter den amerikanske logikern och filosofen Willard Van Orman Quine (1908-2000 ) , som var engagerad i en djupgående studie av indirekt självreferens .
Quines är möjliga i vilket Turing-komplett programmeringsspråk som helst - som en konsekvens av Kleenes rekursionsteorem . Quine-idén beskrevs först av Paul Bratley ( Eng. Bratley, Paul ) och Jean Millo ( Eng. Millo, Jean ) i «Computer Recreations; Self-Reproducing Automata, Software - Practice & Experience, Issue 2 (1972), sid. 397-400. Bratley blev intresserad av självreproducerande program efter att ha sett det första sådana programmet skrivet i programmeringsspråket Atlas Autocode i Edinburgh på 1960-talet av läraren och forskaren Hamish Dewar .
Här är källkoden för detta program:
%BÖRJA !DETTA ÄR ETT SJÄLVREPRODUCERANDE PROGRAM %RUTINESPEC R R SKRIV UT SYMBOL(39) R SKRIV UT SYMBOL(39) NY LINJE %CAPTION %END~ %CAPTION %ENDOFPROGRAM~ %ROUTINER %PRINTTEXT ' %BÖRJA !DETTA ÄR ETT SJÄLVREPRODUCERANDE PROGRAM %RUTINESPEC R R SKRIV UT SYMBOL(39) R SKRIV UT SYMBOL(39) NY LINJE %CAPTION %END~ %CAPTION %ENDOFPROGRAM~ %ROUTINER %PRINTTEXT ' %SLUTET %ENDOFPROGRAMEn n :e ordningens Quine för är ett program som visar kod så att körning av koden visar kod . I det här fallet visar koden koden för det ursprungliga programmet på skärmen.
En kedjequine för en lista över programmeringsspråk är en sådan kod i språket att, när alla koder körs i tur och ordning, koden på språket matar ut en godtycklig kod på språket . Samtidigt visar koden på det språk som genereras som ett resultat av stegen den ursprungliga koden på språket .
Den japanska programmeraren Yusuke Endo skapade 2013 en chain quine för att starta i programmeringsspråket Ruby (men, enligt definitionen, på grund av algoritmens cykliska natur, om det finns koder på alla språk, kan du starta exekveringen av cykla från någon av dem). Programmeringsspråk i Quine är ordnade i alfabetisk ordning. År 2018 höjde han antalet språk i denna Quine till 128 [1] .
Yusuke Endo skapade också en pseudokin i Ruby som visar sin text med hjälp av pseudoanimation (ritar nya kombinationer av tecken på konsolen vid ett givet intervall).
Tuppers självreferensformel kan också betraktas som en slags matematisk variation av Quine - en ojämlikhet vars sanningspunkter i ett visst område av planet drar samma formel.