Les Quines sont-ils utiles comme autre chose qu'un puzzle de programmation?

9

Les quines, qui sont des programmes qui génèrent leur propre code en tout ou partie de leur sortie, sont une bonne idée pour un puzzle de programmation. Cependant, ont-ils une utilité au-delà de cela?

Ingénieur du monde
la source
2
Il n'y a pas d'application pratique que je sache.
Robert Harvey

Réponses:

8

La seule fois où j'ai entendu parler d'une utilisation pratique des quines, c'est quand Ken Thompson l'a utilisé pour cacher un cheval de Troie dans le programme de connexion Unix .

Le cheval de Troie se composait de quelque chose comme if (login == "Trojan") login();(plus probablement écrit en C), mais quelque chose comme ça serait trop évident dans le code. Donc, ce qu'il a fait, c'est de l'intégrer dans une quine et de le cacher dans les binaires du compilateur C.

Les propriétés d'auto-réplication du quine étaient suffisantes pour garantir que même s'il n'y avait aucune trace de cette porte dérobée dans aucun code source, elle se compilerait efficacement chaque fois qu'un compilateur C rencontrerait une fonction de connexion Unix ().

Je suppose que des explications plus claires pourraient provenir de la lecture du document. C'est un bon papier.

Voir aussi: Le piratage du compilateur de Ken Thompson est-il toujours une menace?

rahmu
la source
2
C'est ma compréhension aussi. La seule utilisation pratique d'un quine est dans les logiciels malveillants.
JohnFx
4

Une quine a été utilisée pour ensemencer Tierra , un simulateur d'organisme numérique, et la vie en a ensuite évolué. La quine a été utilisée car elle garantissait que la première génération produirait une progéniture viable.

L'évolution a conduit à de nombreux résultats intéressants, notamment des formes de vie parasitaires et symbiotiques, et même des métaparasites. Cela pourrait-il être considéré comme «utile»?

Alex Feinman
la source
4

Après quelques recherches sur Google, la réponse surprenante est qu'il y a au moins un effort académique théorique pour les utiliser pour rendre le code auto-réparant, apparemment.

Un de mes termes de recherche était "programmation génétique", si quelqu'un veut aller plus loin - c'est le seul domaine de programmation connexe potentiellement utile auquel je pouvais penser.

EDIT - Je viens de découvrir l'utilisation de Quines dans un plan anglais d'une preuve mathématique (réponse de Ron Maimon) du théorème de Godel.

psr
la source
1

J'ai utilisé des techniques similaires à Quine dans les pages Web dans le passé. Attention, c'était en 1998-99 ...

J'avais ce que nous appelons maintenant une «application Web», un ensemble de programmes CGI-BIN, dont certains effectuaient des interactions fastidieuses avec les mainframes. Afin d'économiser deux fois la partie chronophage, dans certains cas, j'enverrais du JavaScript qui pourrait réécrire la page d'origine dans un formulaire pour renvoyer des informations précalculées afin de "réserver une place dans le futur". Je ne me souviens pas quelle particularité de l'interprétation JavaScript à l'époque l'exigeait, mais le codage de type Quine, et le décodage en sortie, du HTML "réserver une place dans le futur" et du JavaScript associé devinrent nécessaires.

Bruce Ediger
la source