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?
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?
Réponses:
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?
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»?
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.
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.