Quine, che sono programmi che generano il proprio codice come parte o tutto il loro output sono una buona idea per un puzzle di programmazione. Tuttavia, hanno qualche utilità oltre a questo?
Quine, che sono programmi che generano il proprio codice come parte o tutto il loro output sono una buona idea per un puzzle di programmazione. Tuttavia, hanno qualche utilità oltre a questo?
L'unica volta in cui ho mai sentito parlare di un uso pratico dei quine è quando Ken Thompson lo ha usato per nasconde un cavallo di Troia nel programma di login di Unix .
Il Trojan consisteva in qualcosa come if (login == "Trojan") login();
(più probabilmente scritto in C corretta), ma qualcosa del genere sarebbe troppo ovvio nel codice. Quindi quello che ha fatto è stato incorporarlo in un quine e nasconderlo nei binari del compilatore C.
Le proprietà auto-replicanti del quine erano sufficienti a garantire che anche se non ci fosse traccia di questa backdoor in alcun codice sorgente, sarebbe effettivamente compilato ogni volta che un compilatore C si imbattesse in una funzione login () di Unix.
Credo che le spiegazioni più chiare potrebbero venire dalla lettura del documento. È un buon giornale.
Vedi anche: Il trucco del compilatore di Ken Thompson è ancora una minaccia?
È stato utilizzato un quine per seminare Tierra , un simulatore di organismo digitale e vita poi si è evoluto da esso. Il quine era usato perché garantiva che la prima generazione avrebbe prodotto prole vitale.
L'evoluzione ha portato a molti risultati interessanti, tra cui forme di vita parassitarie e simbiotiche e persino meta-parassiti. Potrebbe essere considerato 'utile'?
Dopo un po 'su Google, la risposta sorprendente è che ci sono almeno alcuni sforzo accademico teorico per usarli per fare codice riparatore automatico, apparentemente.
Uno dei miei termini di ricerca era "programmazione genetica", se qualcuno vuole guardare oltre: è l'unica area di programmazione correlata potenzialmente utile a cui potrei pensare.
EDIT - Ho appena trovato l'uso di Quine in un profilo inglese di una dimostrazione matematica (la risposta di Ron Maimon) del teorema di Godel.
Ho usato tecniche simili a Quine nelle pagine web in passato. Intendiamoci, questo era nel 1998-99 ...
Avevo quella che ora chiamiamo una "web app", una serie di programmi CGI-BIN, alcuni dei quali eseguivano interazioni dispendiose in termini di tempo con i mainframe. Per risparmiare due volte la parte che richiede molto tempo, in alcuni casi invierei JavaScript che potrebbe riscrivere la pagina originale in un modulo per inviare informazioni pre-calcolate per "riservare un posto nel futuro". Non riesco a ricordare quale peculiarità dell'interpretazione JavaScript fosse necessaria al momento, ma la codifica Quine-like e la decodifica in uscita del codice HTML "riservare un posto nel futuro" e il relativo JavaScript sono diventati necessari.
Leggi altre domande sui tag self-improvement puzzles