Quines sono utili come qualcosa di più di un puzzle di programmazione?


9

Quines, che sono programmi che generano il proprio codice come parte o tutto il loro output sono un'idea chiara per un puzzle di programmazione. Tuttavia, hanno qualche utilità oltre a quello?


2
Non esiste un'applicazione pratica che io conosca.
Robert Harvey,

Risposte:


8

L'unica volta che ho mai sentito parlare di un uso pratico delle quines è quando Ken Thompson l'ha usato per nascondere un cavallo di Troia nel programma di login di Unix .

Il Trojan consisteva in qualcosa del genere if (login == "Trojan") login();(più probabilmente scritto nel vero C), 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à autoreplicanti del quine erano sufficienti per garantire che, sebbene non ci fosse traccia di questa backdoor in nessun codice sorgente, si sarebbe effettivamente compilato ogni volta che un compilatore C avrebbe trovato una funzione login () di Unix.

Immagino che spiegazioni più chiare potrebbero venire dalla lettura del giornale. È una buona carta.

Vedi anche: l'hack del compilatore di Ken Thompson è ancora una minaccia?


2
Anche questa è la mia comprensione. L'unico uso pratico di un quine è nel malware.
JohnFx,

4

Un quine è stato usato per seminare Tierra , un simulatore di organismi digitali, e da allora la vita si è evoluta. 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"?


4

Dopo alcuni googling, la risposta sorprendente è che c'è almeno qualche sforzo accademico teorico per usarli per rendere il codice autoriparante, apparentemente.

Uno dei miei termini di ricerca era "programmazione genetica", se qualcuno vuole guardare oltre - è l'unica area di programmazione correlata potenzialmente utile che mi viene in mente.

EDIT - Ho appena trovato l'uso di Quines in uno schema inglese di una dimostrazione matematica (la risposta di Ron Maimon) del Teorema di Godel.


1

Ho usato tecniche simili a Quine in pagine Web in passato. Intendiamoci, questo è stato nel 1998-99 ...

Avevo quella che ora chiamiamo "web app", un insieme di programmi CGI-BIN, alcuni dei quali hanno eseguito interazioni dispendiose in termini di tempo con i mainframe. Per evitare di fare 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 in futuro". Non riesco a ricordare quale peculiarità dell'interpretazione JavaScript all'epoca lo richiedesse, ma sono diventati necessari la codifica Quine-like e la decodifica sull'output del HTML "riserva un posto nel futuro" e il JavaScript associato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.