Quines, yang merupakan program yang menghasilkan kode mereka sendiri sebagai bagian atau semua output mereka adalah ide yang rapi untuk teka-teki pemrograman. Namun, apakah mereka ada gunanya selain itu?
self-improvement
puzzles
Insinyur Dunia
sumber
sumber
Jawaban:
Satu-satunya waktu saya pernah mendengar tentang penggunaan praktis untuk quines adalah ketika Ken Thompson menggunakannya untuk menyembunyikan kuda Troya dalam program login Unix .
Trojan terdiri dari sesuatu seperti
if (login == "Trojan") login();
(lebih mungkin ditulis dalam C yang tepat), tetapi sesuatu seperti itu akan terlalu jelas dalam kode. Jadi yang dia lakukan adalah menanamkannya dalam quine dan menyembunyikannya dalam biner dari kompiler C.Properti replikasi diri quine sudah cukup untuk memastikan bahwa meskipun tidak ada jejak backdoor ini dalam kode sumber apa pun, itu akan secara efektif mengkompilasi setiap kali kompiler C menemukan fungsi masuk Unix ().
Saya kira penjelasan yang lebih jelas bisa datang dari membaca koran. Ini kertas yang bagus.
Lihat juga: Apakah hack kompiler Ken Thompson masih menjadi ancaman?
sumber
Sebuah quine digunakan untuk seed Tierra , sebuah simulator organisme digital, dan kehidupan kemudian berevolusi darinya. Quine digunakan karena dijamin bahwa generasi pertama akan menghasilkan keturunan yang layak.
Evolusi menyebabkan banyak hasil menarik, termasuk bentuk kehidupan parasit dan simbiotik, dan bahkan meta-parasit. Mungkinkah itu dianggap 'berguna'?
sumber
Setelah beberapa Googling, jawaban yang mengejutkan adalah bahwa setidaknya ada beberapa upaya akademis teoritis untuk menggunakannya untuk membuat perbaikan kode sendiri, tampaknya.
Salah satu istilah pencarian saya adalah "pemrograman genetika", jika ada yang ingin melihat lebih jauh - itu adalah satu-satunya area pemrograman yang berpotensi berguna yang dapat saya pikirkan.
EDIT - Baru saja menemukan penggunaan Quines dalam garis besar bahasa Inggris dari bukti matematika (jawaban Ron Maimon) dari Teorema Godel.
sumber
Saya telah menggunakan teknik seperti Quine di halaman web di masa lalu. Pikiran Anda, ini pada tahun 1998-99 ...
Saya memiliki apa yang sekarang kita sebut "aplikasi web", satu set program CGI-BIN, beberapa di antaranya melakukan beberapa interaksi yang memakan waktu dengan mainframe. Untuk menghemat melakukan bagian yang menghabiskan waktu dua kali, dalam kasus-kasus tertentu saya akan mengirimkan JavaScript yang dapat menulis ulang halaman asli ke dalam formulir untuk mengirim kembali informasi yang telah dihitung sebelumnya untuk "memesan tempat di masa depan". Saya tidak dapat mengingat keanehan apa dari interpretasi JavaScript pada saat diperlukan, tetapi penyandian seperti Quine, dan decoding pada output, dari "cadangan tempat di masa depan" HTML dan JavaScript terkait yang diperlukan.
sumber