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?
self-improvement
puzzles
Inżynier świata
źródło
źródło
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?
źródło
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”?
źródło
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.
źródło
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.
źródło