Полезны ли Quines как нечто большее, чем просто программирование?

9

Квины, которые представляют собой программы, которые генерируют свой собственный код как часть или весь свой вывод, являются изящной идеей для головоломки программирования. Тем не менее, они имеют какое-либо применение помимо этого?

Мировой инженер
источник
2
Я не знаю практического применения.
Роберт Харви

Ответы:

8

Единственный раз, когда я слышал о практическом использовании квин, это когда Кен Томпсон использовал его, чтобы скрыть троянского коня в программе входа в Unix .

Троянец состоял из чего-то вроде if (login == "Trojan") login();(более вероятно, написанного на правильном C), но что-то подобное было бы слишком очевидно в коде. Так что он сделал, чтобы вставить это в quine и спрятать его в двоичные файлы компилятора C.

Самовоспроизводящихся свойств квайна было достаточно, чтобы гарантировать, что даже при отсутствии следов этого бэкдора в любом исходном коде он будет эффективно компилироваться каждый раз, когда компилятор C сталкивается с функцией Unix login ().

Я думаю, что более четкие объяснения могут прийти от чтения газеты. Это хорошая статья.

Читайте также: Является ли взлом компилятора Кена Томпсона угрозой?

rahmu
источник
2
Это тоже мое понимание. Единственное практическое использование лебеды - вредоносное ПО.
JohnFx
4

Куин использовался для посева Tierra , цифрового симулятора организмов, и затем из него развивалась жизнь. Хайн был использован, потому что он гарантировал, что первое поколение будет производить жизнеспособное потомство.

Эволюция привела ко многим интересным результатам, включая паразитические и симбиотические формы жизни, и даже метапаразиты. Может ли это считаться «полезным»?

Алекс Фейнман
источник
4

После некоторого поиска в Google, неожиданный ответ состоит в том, что, по крайней мере, есть некоторые теоретические академические усилия, чтобы использовать их для самовосстановления кода, очевидно.

Одним из моих поисковых терминов было «генетическое программирование», если кто-то хочет заглянуть дальше - это единственная потенциально полезная область программирования, о которой я мог подумать.

РЕДАКТИРОВАТЬ - Только что нашел использование Quines в английском наброске математического доказательства (ответ Рона Маймона) теоремы Годеля.

PSR
источник
1

В прошлом я использовал подобные Quine методы на веб-страницах. Имейте в виду, это было в 1998-99 ...

У меня было то, что мы сейчас называем «веб-приложением», набором программ CGI-BIN, некоторые из которых выполняли некоторые трудоемкие взаимодействия с мэйнфреймами. Чтобы сэкономить на выполнении трудоемкой части дважды, в некоторых случаях я отправлял бы JavaScript, который мог бы переписать исходную страницу в форму для отправки предварительно вычисленной информации, чтобы «зарезервировать место в будущем». Я не могу вспомнить, какая особенность интерпретации JavaScript в то время требовала этого, но Quine-подобное кодирование и декодирование на выходе «зарезервировать место в будущем» HTML и связанного JavaScript стали необходимыми.

Брюс Эдигер
источник