Quines, bei denen es sich um Programme handelt, die ihren eigenen Code als Teil oder die gesamte Ausgabe generieren, sind eine gute Idee für ein Programmierpuzzle. Haben sie darüber hinaus eine Verwendung?
Quines, bei denen es sich um Programme handelt, die ihren eigenen Code als Teil oder die gesamte Ausgabe generieren, sind eine gute Idee für ein Programmierpuzzle. Haben sie darüber hinaus eine Verwendung?
Antworten:
Das einzige Mal, dass ich jemals von einer praktischen Verwendung für Quines gehört habe, war, als Ken Thompson damit ein Trojanisches Pferd im Unix-Anmeldeprogramm versteckte .
Der Trojaner bestand aus so etwas if (login == "Trojan") login();
(wahrscheinlich in richtigem C geschrieben), aber so etwas wäre im Code zu offensichtlich. Also bettete er es in eine Quine ein und versteckte es in den Binärdateien des C-Compilers.
Die selbstreplizierenden Eigenschaften des Quine reichten aus, um sicherzustellen, dass diese Hintertür zwar in keinem Quellcode vorhanden war, aber jedes Mal effektiv kompiliert wurde, wenn ein C-Compiler auf eine Unix-login () -Funktion stieß.
Ich denke, klarere Erklärungen könnten durch das Lesen der Zeitung entstehen. Es ist ein gutes Papier.
Siehe auch: Ist Ken Thompsons Compiler-Hack immer noch eine Bedrohung?
Eine Quine wurde verwendet, um Tierra , einen digitalen Organismus-Simulator, zu säen , und das Leben entwickelte sich daraus. Das Quine wurde verwendet, weil es garantierte, dass die erste Generation lebensfähige Nachkommen hervorbringen würde.
Die Entwicklung führte zu vielen interessanten Ergebnissen, einschließlich parasitärer und symbiotischer Lebensformen und sogar Metaparasiten. Könnte das als "nützlich" angesehen werden?
Nach einigem Googeln ist die überraschende Antwort, dass es zumindest einige theoretische akademische Anstrengungen gibt , um Code anscheinend selbst zu reparieren.
Einer meiner Suchbegriffe war "genetische Programmierung", wenn jemand weiter suchen möchte - es ist der einzige potenziell nützliche verwandte Programmierbereich, den ich mir vorstellen kann.
BEARBEITEN - Habe gerade die Verwendung von Quines in einem englischen Umriss eines mathematischen Beweises (Ron Maimons Antwort) von Godels Theorem gefunden.
Ich habe in der Vergangenheit Quine-ähnliche Techniken in Webseiten verwendet. Wohlgemerkt, das war 1998-99 ...
Ich hatte eine sogenannte "Web-App", eine Reihe von CGI-BIN-Programmen, von denen einige zeitaufwändige Interaktionen mit Mainframes durchführten. Um den zeitaufwändigen Teil zweimal zu sparen, schickte ich in bestimmten Fällen JavaScript mit, das die Originalseite in ein Formular umschreiben konnte, um vorberechnete Informationen zurückzusenden, um "einen Platz in der Zukunft zu reservieren". Ich kann mich nicht erinnern, welche Besonderheit der JavaScript-Interpretation zu der Zeit dies erforderte, aber eine quine-artige Codierung und Decodierung des HTML-Codes "reserviere einen Platz in der Zukunft" und des zugehörigen JavaScript bei der Ausgabe wurden notwendig.