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?
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?
Odpowiedzi:
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?
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”?
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.
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.