DİKKAT: Birazdan okuyacağınız yazıda, programcı milletinin aşırı can sıkıntısı durumunda nelerle uğraştığını göreceksiniz. Okurken “Neden?”diye sorabilirsiniz kendi kendinize, “Neden bir insan böyle şeyler yapar?” Cevabını yazının sonunda vereceğiz.

Merhabalar değerli e-bergi okurları! Bu ay sizlere programcılığın mantık sınırlarını zorlayan, egzotik kavramlar olan esoterik dillerden bashedecek ve bunlara birkaç örnek vereceğim.

Şimdi ne ayak bu “eso-bilmemne” diller, ondan başlayalım. Esoterik lafı “sadece belli bir topluluğun anladığı bir şey” anlamındaki bir sıfattır. Esoterik dillerin ise(programlama dillerinden bahsediyoruz) “üç-beş kişinin anlam verebildiği programlama dili” olan resmi tanımının yanı sıra, “saçma sapan programala dili” olan daha yaygın olan tanımı mevcut. Biz de bunu böyle bilmeliyiz.

Nereden çıkmış buna bir bakalım. Taa 1972 yılında, Priceton Üniversitesi'ndeki Don Woods ve James Lyon adında iki öğrencinin, dönemin programlama dilleriyle dalga geçmek amacıyla ortaya çıkarmış oldukları INTERCAL dili, bu akımın öncüsü sayılıyor. O zamanlar C, Java falan yok tabii, adamlar Assembly'e giydirmişler. Özelliklerini açıklamaya pek girişmeyeceğim, bir örnek Hello World vereyim, siz anlayın beni:

DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP

Evet farkındayım, fazla bir şey anlaşılmıyor. Amaç da bu zaten. Kullanım alanı falan da yok. Sadece kağıt üzerinde varlığını sürdürmüş bir dildi INTERCAL.

Yine eskilerde, 1992'de, Hollandalı bir oyun programcısı olan Wouter van Oortmerssen tarafından yaratılan FALSE, kavramsal olarak nispeten günümüz dilleriyle daha bir benzerlik gösteriyor. İşlerini tamamıyla bir yığıt(stack) üzerinden halleden FALSE'un ”while”, “if” gibi tanıdık akış kontrolü(control flow) araçlarının yanı sıra, “lambda calculus”e olanak tanıyan anahtar kelimeleri de mevcut(kelime demek pek doğru olmaz ama). Fakat koda baktığımız zaman pek de insancıl bir ifadeyle karşılaşmıyoruz. Bir örnek, bildiğimiz özyinelemeli faktöriyel fonksiyonunun tanımı:

[$1=$[\%1\]?~[$1-f;!*]?]f:

veya 100'e kadar olan asal sayıları bastıran program:

99 9[1-$][\$@$@$@$@\/*=[1-$$[%\1-$@]?0=[\$.' ,\]?]?]#

İnandırıcı gelmiyor değil mi? Oortmerssen'den duyduğumuz kadarıyla FALSE'un yazılma amacı, düzgün çalışan bir programa ne kadar küçük boyutlu bir derleyici yazılabileceği merakıymış. Sanıyoruz ki Oortmerssen, 1024 byte'lık FALSE derleyicisyle bu merakını epey gidermiş.

İlginç bir şekilde ünlü olan FALSE, bir çok esoterik dile daha ilham kaynağı olmuş. Bunlar için bize en çok tanıdık gelen, Brainfuck olacaktır. Bazı insanların CV'lerinde “bildiği programlama dilleri” hanesine bile yazdığı Brainfuck, 1993'te ortaya çıkmış. Urban Müller'in, “Ben FALSE'unkinden daha küçük bir derleyici yazacğım ulan!” gazıyla başladığı çalışma, 200 byte'lık bir derleyiciyle bitmiş. Doğal olarak, bu kadar küçük bir derleyiciyle alakadar olan dilin pek de anlaşılabilir olması beklenemez. Buram buram minimalizm kokan Brainfuck, topu topu 8 adet karakter içeriyor ve bu karakterlerin her biri de bir komuta karşılık gelmekte. Bir göz atalım. Bir adet işaretçimiz(pointer) var, bununla şu işlemleri yapıyoruz:

>   : bir sağdaki byte'ı göster     ---C karşılığı--->  ++ptr
<   : bir soldaki byte'ı göster ----------------->      --ptr
+   : işaretçinin gösterdiği byte'ı 1 artır     ----------------->      ++(*ptr)
-   : işaretçinin gösterdiği byte'ı 1 azalt     ----------------->      --(*ptr)
.   : işaretçinin gösterdiği byte'taki sayının ASCII kodunu ekrana bas  ----------------->  putchar(*ptr)
,   : 1 byte'lık girdi al, işaretçinin gösterdiği byte'a koy    ----------------->  *ptr=getchar()
[   : işaretçinin gösterdiği byte'ın değeri 0 olmadığı koşuluyla döngü başlat     ----------------->     while(*ptr) {
]   : döngüyü bitir     ----------------->      }

Bir de örnek Hello World:

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]
<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.

Ve faktöriyel:

+++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++>+++++++>>+<<[>++++++++++++++++++++++++++++++++++++++++++++++++.------------------------------------------------<<<<.-.>.<.+>>>>>                                           >>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[<+>-]                                             >[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-] <<<<<<.                                      >>+>[>>+<<-]>>[<<<[>+>+<<-]>>[<<+>>-]>-]<<<<-]

Küfürleri duyar gibiyim.

Zaten kafadan kontak olan programcı milleti, böyle karmakarışık, aynı zamanda da çok sade bu dili sevgiyle kucaklayıp bağırına bastı. Brainfuck, zamanla internetin en ünlü esoterik dili olmasının yanı sıra, daha pek çok esoterik dilin icadının da yolunu açmış oldu. Çoğu Brainfuck klonundan ileri gidememiş bu dillerin arasında en ilgi çekici olanı Ook!. Brainfuck'ın neredeyse aynısı olan Ook!'un ondan tek farkı, o bahsettiğimiz sekiz tane karakterin orangutan dilinde olması. Orangutan dili mi? Aha şöyle:

>   Ook. Ook? 
<   Ook? Ook.
+   Ook. Ook. 
-   Ook! Ook! 
.   Ook! Ook. 
,   Ook. Ook! 
[   Ook! Ook? 
]   Ook? Ook!

Adettendir, örnek Hello World:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.

Burada sizinle aynı tepkiyi veriyorum: Abi bu ne? Hani tamam, “geek”lik denen kavram kapsamında, anlaşılma amacı gütmeden espriler yaparsın da, bu biraz fazla olmuş. Bu dilin yaratıcısı olan adam David Morgan-Mar denen adam, tam bir rahatsız. Daha pek çok esoterik dilin altına imzasını atmış olan bu zat-ı muhteremin bir diğer haltı da “Zombie-Oriented Machine-Being Interface Engine” yani kısaca ZOMBIE. Morgan-Mar kendi internet sitesinde, bu dilin amacının “kara büyücülerin ölü bedenleri canlandırmasını, ruhları çağırıp kontrol etmek sağlamak ve her türlü berimsel problemi çözmelerine olanak vermek” olduğunu söylüyor. Ne kadar başarılı olduğu ise, Fibonacci sayıları programı ile anlaşılabilir:

Zombie1 is a zombie
summon
        remember 1
bind

Zombie2 is a zombie
summon
        remember 1
bind

FibonacciZombie is a zombie
summon
        remember 0
        task SayFibonaccis
                shamble
                        say moan Zombie1
                        say moan Zombie2
                        remember Zombie1 moan Zombie1 moan Zombie2
                        remember Zombie2 moan Zombie1 moan Zombie2
                        remember moan 2
                until remembering 100
        animate
animate

Ben yeterince korktum. Oradan buradan enteresan tipler fırlayacak şimdi, beni canlı canlı yiyecekler. Bunu daha fazla kurcalamak istemiyorum.

Son olarak benim favorim olan esoterik dilden biraz bahsedeceğim. Anlaşılan o ki, Morgan-Mar denen adamın epey boş vakti varmış. Yaratımlarından biri de “Piet” denen dil, işin en uç noktalarından biri. Yazılara esir değiliz artık, resimlerle kod yazıyoruz! Resim mi? Resim derken, renk pikselleri... Kırmızı, sarı, yeşil, camgöbeği, mavi, pembe renkleri, bunların açık, normal, koyu versiyonları, siyah ve beyazla beraber 20 adet piksel seçeneğimiz var. Bunları belli sırada yan yana, alt alta üst üste koyunca program oluyor. Yorumlayıcı, bu piksellerin özerinde belli bir sırayla gezinerek, yine belli kurallara göre bir yığıtla oynuyor. Açıkçası ben de pek anlamadım nasıl çalıştığını, fakat sonuçlar gerçekten inanılmaz.

Hello World:

2000-2099 yılları arasındaki herhangi bir günün haftanın hangi gününe denk geldiğini hesaplayan program:

Daha fazlası için mutlaka bu siteyi ziyaret edin, harika şeyler yapmış adamlar: http://www.dangermouse.net/esoteric/piet/samples.html

Bu ve -kaynaklarda belirttiğim- daha nice programlama dili, aslında programlama amacıyla yaratılmamış. Yani kimsenin oturup da “Haydi beyler, Brainfuck'la oyun yazalım.” diyecek hali yoktur. Derken aşağıdaki bağlantıya girmemle birlikte bütün hayat enerjimin tükendiğini hissettim:

Vee... sıkı durun, bir macera oyunu!

http://jonripley.com/i-fiction/games/LostKingdomBF.html

Evet, oyunu indirip kaynak koduna bakınca da, yazının başındaki sorunun cevabını haykırmak istiyorum sayın okurlar: İŞSİZ MİSİNİZ KARDEŞİM? İŞİNİZ YOK MU SİZİN? 30000 SATIR BF KODU NE DEMEK YA? Akşam akşam adamın asabını bozuyorlar.

Efendim, özetin özeti, esoterik diller, dünyadaki işsiz insanlar, özellikle işsiz programcılar için tasarlanmış zaman öldürme araçlarıdır. Bunlarla uğraşmak için sahip olmanız gereken işsizlik katsayısı olan 'k', o kadar uğraştan sonra bile yaptığınızı anlamayacak insanların çokluğunu hesaba katarsak, gayet yüksek bir değer olmalıdır.

Bir sonraki sayımızda buluşmak üzere, zamanınızı iyi değerlendirmeniz dileği ile. Esen kalın.

Kaynaklar