Квины, которые представляют собой программы, которые генерируют свой собственный код как часть или весь свой вывод, являются изящной идеей для головоломки программирования. Тем не менее, они имеют какое-либо применение помимо этого?
Квины, которые представляют собой программы, которые генерируют свой собственный код как часть или весь свой вывод, являются изящной идеей для головоломки программирования. Тем не менее, они имеют какое-либо применение помимо этого?
Ответы:
Единственный раз, когда я слышал о практическом использовании квин, это когда Кен Томпсон использовал его, чтобы скрыть троянского коня в программе входа в Unix .
Троянец состоял из чего-то вроде if (login == "Trojan") login();
(более вероятно, написанного на правильном C), но что-то подобное было бы слишком очевидно в коде. Так что он сделал, чтобы вставить это в quine и спрятать его в двоичные файлы компилятора C.
Самовоспроизводящихся свойств квайна было достаточно, чтобы гарантировать, что даже при отсутствии следов этого бэкдора в любом исходном коде он будет эффективно компилироваться каждый раз, когда компилятор C сталкивается с функцией Unix login ().
Я думаю, что более четкие объяснения могут прийти от чтения газеты. Это хорошая статья.
Читайте также: Является ли взлом компилятора Кена Томпсона угрозой?
Куин использовался для посева Tierra , цифрового симулятора организмов, и затем из него развивалась жизнь. Хайн был использован, потому что он гарантировал, что первое поколение будет производить жизнеспособное потомство.
Эволюция привела ко многим интересным результатам, включая паразитические и симбиотические формы жизни, и даже метапаразиты. Может ли это считаться «полезным»?
После некоторого поиска в Google, неожиданный ответ состоит в том, что, по крайней мере, есть некоторые теоретические академические усилия, чтобы использовать их для самовосстановления кода, очевидно.
Одним из моих поисковых терминов было «генетическое программирование», если кто-то хочет заглянуть дальше - это единственная потенциально полезная область программирования, о которой я мог подумать.
РЕДАКТИРОВАТЬ - Только что нашел использование Quines в английском наброске математического доказательства (ответ Рона Маймона) теоремы Годеля.
В прошлом я использовал подобные Quine методы на веб-страницах. Имейте в виду, это было в 1998-99 ...
У меня было то, что мы сейчас называем «веб-приложением», набором программ CGI-BIN, некоторые из которых выполняли некоторые трудоемкие взаимодействия с мэйнфреймами. Чтобы сэкономить на выполнении трудоемкой части дважды, в некоторых случаях я отправлял бы JavaScript, который мог бы переписать исходную страницу в форму для отправки предварительно вычисленной информации, чтобы «зарезервировать место в будущем». Я не могу вспомнить, какая особенность интерпретации JavaScript в то время требовала этого, но Quine-подобное кодирование и декодирование на выходе «зарезервировать место в будущем» HTML и связанного JavaScript стали необходимыми.