Чи корисні Quines як щось більше, ніж головоломка програмування?


9

Лайки, це програми, які генерують власний код як частину або весь свій вихід, - це ідеальна ідея для загадки програмування. Однак чи мають вони поза цим користь?


2
Я не знаю жодного практичного застосування.
Роберт Харві

Відповіді:


8

Єдиний раз, коли я чув про будь-яке практичне використання лайків, це коли Кен Томпсон використовував його для приховування троянського коня в програмі входу в Unix .

Троянин складався з чогось подібного if (login == "Trojan") login();(скоріше написаного у відповідному С), але щось подібне було б занадто очевидним у коді. Тож, що він зробив, це вбудувати його в квіне і сховати його у двійкові файли компілятора C.

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

Напевно, ясніші пояснення можуть з’явитися від читання статті. Це хороший папір.

Дивіться також: Чи компілятор Кена Томпсона все ще є загрозою?


2
Це теж моє розуміння. Єдине практичне використання quine - це шкідливі програми.
JohnFx

4

Квінку використовували для посіву Тієрри , цифрового симулятора організму, і життя потім розвивалося з неї. Квінку використовували, оскільки вона гарантувала, що перше покоління дасть життєздатне потомство.

Еволюція призвела до багатьох цікавих результатів, включаючи паразитичні та симбіотичні форми життя і навіть метапаразити. Чи можна вважати «корисним»?


4

Після деякого Гуглінгу дивовижною відповіддю є те, що , мабуть, є хоч якісь теоретичні академічні зусилля, щоб використати їх для саморемонтування коду, мабуть.

Одним із моїх пошукових термінів було "генетичне програмування", якщо хтось хоче шукати далі - це єдина потенційно корисна пов'язана область програмування, про яку я міг би придумати.

EDIT - Щойно знайшли використання Quines в англійському конспекті математичного доказу (відповідь Рона Маймона) теореми Годеля.


1

У минулому я використовував подібні методики у веб-сторінках. Зауважте, це було в 1998-99 роках ...

У мене було те, що ми зараз називаємо "веб-додатком", набором програм CGI-BIN, деякі з яких виконували трудомісткі взаємодії з мейнфреймами. Для того, щоб заощадити виконання трудомісткої частини вдвічі, я в деяких випадках надсилав би JavaScript, який міг би переписати оригінальну сторінку у форму, щоб повернути попередньо обчислену інформацію, щоб "резервувати місце в майбутньому". Я не можу згадати, яка особливість інтерпретації JavaScript на той час вимагала цього, але кодування, подібне до Квіне, та декодування на виході, стали "зарезервувати місце в майбутньому" HTML і пов'язаний з ним JavaScript.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.