¿Quines es útil como algo más que un rompecabezas de programación?

9

Quines, que son programas que generan su propio código como parte o la totalidad de su salida, son una buena idea para un rompecabezas de programación. Sin embargo, ¿tienen algún uso más allá de eso?

Ingeniero mundial
fuente
2
No hay una aplicación práctica que yo sepa.
Robert Harvey

Respuestas:

8

La única vez que escuché de algún uso práctico para las quines fue cuando Ken Thompson lo usó para ocultar un caballo de Troya en el programa de inicio de sesión de Unix .

El troyano consistía en algo así if (login == "Trojan") login();(probablemente escrito en C), pero algo así sería demasiado obvio en el código. Entonces, lo que hizo fue incrustarlo en una quine y ocultarlo en los archivos binarios del compilador de C.

Las propiedades de autorreplicación de la quine fueron suficientes para garantizar que, aunque no hubiera rastro de esta puerta trasera en ningún código fuente, se compilaría de manera efectiva cada vez que un compilador de C encontrara una función de inicio de sesión () de Unix.

Supongo que se podrían obtener explicaciones más claras al leer el periódico. Es un buen papel.

Ver también: ¿El hack de compilación de Ken Thompson sigue siendo una amenaza?

rahmu
fuente
2
Ese es mi entendimiento también. El único uso práctico de una quine es en malware.
JohnFx
4

Se usó una quine para sembrar Tierra , un simulador digital de organismos, y la vida evolucionó a partir de él. El quine se usó porque garantizaba que la primera generación produciría descendencia viable.

La evolución condujo a muchos resultados interesantes, incluidas formas de vida parasitarias y simbióticas, e incluso metaparásitos. ¿Podría eso considerarse "útil"?

Alex Feinman
fuente
4

Después de buscar en Google, la respuesta sorprendente es que al menos hay un esfuerzo académico teórico para usarlos para hacer que el código se repare por sí mismo, aparentemente.

Uno de mis términos de búsqueda era "programación genética", si alguien quiere mirar más allá, es la única área de programación relacionada potencialmente útil que se me ocurre.

EDITAR: acabo de encontrar el uso de Quines en un esquema en inglés de una prueba matemática (la respuesta de Ron Maimon) del Teorema de Godel.

psr
fuente
1

He usado técnicas similares a Quine en páginas web en el pasado. Eso sí, esto fue en 1998-99 ...

Tenía lo que ahora llamamos una "aplicación web", un conjunto de programas CGI-BIN, algunos de los cuales realizaron algunas interacciones que requieren mucho tiempo con los mainframes. Con el fin de ahorrar haciendo la parte que consume mucho tiempo dos veces, en ciertos casos enviaría JavaScript que podría volver a escribir la página original en un formulario para enviar información precalculada para "reservar un lugar en el futuro". No puedo recordar qué peculiaridad de la interpretación de JavaScript en el momento lo requería, pero la codificación similar a Quine, y la decodificación en la salida, del HTML "reservar un lugar en el futuro" y el JavaScript asociado se hicieron necesarios.

Bruce Ediger
fuente