Czy Quines jest użyteczny jako coś więcej niż puzzle programistyczne?

9

Quines, które są programami, które generują własny kod jako część lub całość swoich wyników, to świetny pomysł na układankę programistyczną. Czy mają jednak jakiekolwiek zastosowanie poza tym?

Inżynier świata
źródło
2
Nie znam praktycznego zastosowania, które znam.
Robert Harvey

Odpowiedzi:

8

Jedyny raz, kiedy słyszałem o praktycznym zastosowaniu quinesów, było to, że Ken Thompson użył go do ukrycia konia trojańskiego w uniksowym programie logowania .

Trojan składał się z czegoś podobnego if (login == "Trojan") login();(prawdopodobnie napisanego we właściwym C), ale coś takiego byłoby zbyt oczywiste w kodzie. Więc zrobił to, aby osadzić go w quine i ukryć w plikach binarnych kompilatora C.

Samoreplikujące się właściwości quine były wystarczające, aby zapewnić, że nawet jeśli nie ma śladu tego backdoora w żadnym kodzie źródłowym, będzie on skutecznie kompilował się za każdym razem, gdy kompilator C natrafi na funkcję logowania () w systemie Unix.

Wydaje mi się, że bardziej czytelne wyjaśnienia mogą wynikać z czytania artykułu. To dobry papier.

Zobacz także: Czy hack kompilatora Kena Thompsona nadal stanowi zagrożenie?

rahmu
źródło
2
To też rozumiem. Jedynym praktycznym zastosowaniem quine jest złośliwe oprogramowanie.
JohnFx,
4

Quine została użyta do zaszczepienia Tierry , cyfrowego symulatora organizmów, i życie z niej wyewoluowało. Quine zostało użyte, ponieważ gwarantowało, że pierwsze pokolenie stworzy żywe potomstwo.

Ewolucja doprowadziła do wielu interesujących rezultatów, w tym pasożytniczych i symbiotycznych form życia, a nawet meta-pasożytów. Czy można to uznać za „przydatne”?

Alex Feinman
źródło
4

Po pewnym Googlingu zaskakująca odpowiedź jest taka, że ​​istnieje przynajmniej teoretyczny wysiłek akademicki, aby je wykorzystać do najwyraźniej samodzielnej naprawy kodu.

Jednym z moich wyszukiwanych haseł było „programowanie genetyczne”, jeśli ktoś chce szukać dalej - jest to jedyny potencjalnie użyteczny powiązany obszar programowania, o którym mogłem myśleć.

EDYCJA - Właśnie znalazłem użycie Quinesa w angielskim zarysie dowodu matematycznego (odpowiedź Rona Maimona) twierdzenia Godela.

psr
źródło
1

W przeszłości używałem technik podobnych do Quine na stronach internetowych. Pamiętaj, że to było w latach 1998-99 ...

Miałem coś, co teraz nazywamy „aplikacją internetową”, zestawem programów CGI-BIN, z których niektóre przeprowadzały czasochłonne interakcje z komputerami mainframe. Aby zaoszczędzić robienia czasochłonnej części dwa razy, w niektórych przypadkach wysyłam JavaScript, który może ponownie napisać oryginalną stronę w formularzu, aby odesłać wcześniej obliczone informacje w celu „zarezerwowania miejsca w przyszłości”. Nie mogę sobie przypomnieć, jaka specyfika interpretacji JavaScript w danym momencie tego wymagała, ale konieczne stało się kodowanie typu Quine i dekodowanie na wyjściu „Zarezerwuj miejsce w przyszłości” HTML i powiązany JavaScript.

Bruce Ediger
źródło