Лайки, це програми, які генерують власний код як частину або весь свій вихід, - це ідеальна ідея для загадки програмування. Однак чи мають вони поза цим користь?
Лайки, це програми, які генерують власний код як частину або весь свій вихід, - це ідеальна ідея для загадки програмування. Однак чи мають вони поза цим користь?
Відповіді:
Єдиний раз, коли я чув про будь-яке практичне використання лайків, це коли Кен Томпсон використовував його для приховування троянського коня в програмі входу в Unix .
Троянин складався з чогось подібного if (login == "Trojan") login();
(скоріше написаного у відповідному С), але щось подібне було б занадто очевидним у коді. Тож, що він зробив, це вбудувати його в квіне і сховати його у двійкові файли компілятора C.
Властивості самовідтворення Quine були достатніми для того, щоб, хоч у цьому вихідному коді не було сліду від цього задніх куточків, він ефективно компілював кожного разу, коли компілятор C натрапив на функцію Unix login ().
Напевно, ясніші пояснення можуть з’явитися від читання статті. Це хороший папір.
Дивіться також: Чи компілятор Кена Томпсона все ще є загрозою?
Квінку використовували для посіву Тієрри , цифрового симулятора організму, і життя потім розвивалося з неї. Квінку використовували, оскільки вона гарантувала, що перше покоління дасть життєздатне потомство.
Еволюція призвела до багатьох цікавих результатів, включаючи паразитичні та симбіотичні форми життя і навіть метапаразити. Чи можна вважати «корисним»?
Після деякого Гуглінгу дивовижною відповіддю є те, що , мабуть, є хоч якісь теоретичні академічні зусилля, щоб використати їх для саморемонтування коду, мабуть.
Одним із моїх пошукових термінів було "генетичне програмування", якщо хтось хоче шукати далі - це єдина потенційно корисна пов'язана область програмування, про яку я міг би придумати.
EDIT - Щойно знайшли використання Quines в англійському конспекті математичного доказу (відповідь Рона Маймона) теореми Годеля.
У минулому я використовував подібні методики у веб-сторінках. Зауважте, це було в 1998-99 роках ...
У мене було те, що ми зараз називаємо "веб-додатком", набором програм CGI-BIN, деякі з яких виконували трудомісткі взаємодії з мейнфреймами. Для того, щоб заощадити виконання трудомісткої частини вдвічі, я в деяких випадках надсилав би JavaScript, який міг би переписати оригінальну сторінку у форму, щоб повернути попередньо обчислену інформацію, щоб "резервувати місце в майбутньому". Я не можу згадати, яка особливість інтерпретації JavaScript на той час вимагала цього, але кодування, подібне до Квіне, та декодування на виході, стали "зарезервувати місце в майбутньому" HTML і пов'язаний з ним JavaScript.