Tulisan kali ini saya akan membahas mengenai self-generating code, suatu istilah yang dapat ditemukan pada paper milik Ken Thompson. Lagi-lagi ini merupakan salah satu tugas kuliah Keamanan Informasi. Pada tugas kali ini, saya diminta untuk membuat suatu program yang dapat menampilkan fitur self-regenerating code atau yang biasa dikenal orang dengan metode quine.
Keterangan lengkap mengenai quine dapat dilihat di http://en.wikipedia.org/wiki/Quine_%28computing%29.
Singkatnya ini adalah program di mana output atau hasil dari kode adalah output dari program itu sendiri. Jadi hal ini benar-benar hanya merupakan satu-satunya program yang tujuannya adalah untuk output kode sumber program. Banyak orang yang menyadari bahwa hal ini “menyenangkan” ketika melihat bagaimana sebuah program quine mereka yang dibuat sesingkat mungkin dapat membuat dirinya sendiri. Karena alasan tersebut kebanyakan dari mereka tidak memperhatikan format yang tepat dalam programming termasuk return/line break atau hal lain yang tidak diperlukan supaya program ini berfungsi. Dengan begitu, mereka dapat membuat suatu program self-generating code yang paling singkat yang pernah ada.
Setelah beberapa jam membaca paper milik Ken Thompson tersebut serta eksplorasi mengenai quine, saya mencoba untuk membuat suatu program singkat dengan bahasa C# dengan menggunakan IDE Monodevelop (berhubung saya menggunakan environment UNIX). Dengan dibantu oleh beberapa referensi yang saya temukan, akhirnya saya memutuskan untuk mencoba membuat suatu program singkat yang memiliki fitur self-generating code. Kebetulan saya memilih metode yang ditemukan oleh seorang developer bernama Igor Ostrovsky. Berikut ini adalah screenshot dari program yang dibuat di laptop saya. Pada screenshot berikut akan ditampilkan kode dan outputnya.
Berikut diberikan sourceĀ code yang ada pada screenshot tersebut :
using System;
namespace Q
{
class MainClass
{
public static void Main(string[] args)
{
var s="class Q{{static void Main(){{var s={1}{0}{1};System.Console.Write(s,s,'{1}');}}}}";
System.Console.Write(s,s,'"');
}
}
}
Sedangkan output pada screenshot tersebut akan berupa :
class Q{static void Main(){var s=”class Q{{static void Main(){{var s={1}{0}{1};System.Console.Write(s,s,’{1}’);}}}}”;System.Console.Write(s,s,’”‘);}}
Ide utama di balik implementasi quine ini cukup sederhana. Quine akan terdiri dari dua bagian: definisi dari sebuah string dan program inti. String akan berisi kode sumber dari program inti. Lalu, apa yang akan program inti lakukan? Ia akan mencetak string dua kali: sekali untuk mencetak string definisi, dan sekali lagi untuk mencetak program inti.
Jadi, kita dapat menulis sebuah program yang tahu cara untuk mencetak kode sumbernya. Selain itu, kita juga melakukan hal-hal lain, contohnya :
- Hal ini adalah hasil penting dalam ilmu komputer teoritis, yang dikenal sebagai teorema rekursi. Teorema rekursi dapat digunakan untuk membuktikan berbagai hasil yang menarik. Sebagai contoh, dengan menggunakan teorema rekursi dapat membuktikan bahwa halting problem tidak dapat diputuskan begitu saja.
- Programmer virus tidak hanya dapat menulis program yang tahu bagaimana mereplikasi diri mereka sendiri, tetapi juga melakukan hal-hal lain, seperti mengacaukan komputer Anda.
- Walaupun terkesan Anda menulis program yang pointless tetapi sesungguhnya program singkat ini sangat keren!
Sekian tulisan singkat ini. Semoga bermanfaat.

Komentar Terkini