Değişik Programlama Dili: BrainFuck !
Adından da tahmin edebileceğiniz gibi değişik bir programlama dili ile karşınızdayım (böle dil olmas ossun). Pygments içinde bulunan Lexer’ları incelerken dikkatimi çeken bu dil 90’ların başları ile ortaları arasında (1993) Urban Müller adında çılgın bir programcı tarafından piyasaya sunulmuş bir dil. Yaratılma amacı en küçük derleyiciyi yapmak imiş -ki bazı derleyicileri 200 bayttan küçükmüş-. 8 komutu bulunuyor. İsmine uygun bir amacı da var: Programcıları zorlamak ve eğlendirmek. Yani efendim bu eleman, boş bulunduğu bi vakitte beyni becerecek bir dil hazırlamış. Yalnız, bu dille algoritma bile yazabiliyormuşunuz. Vikipedi Amca öyle diyor.
İşin ilginci sadece paylaşmak istediğim bu dilin 8 komutu var. Başka da bir şey bilmiyorum hakkında. Ama “Hello World” yapmak için kullanılan kod şöyle.
+++++ +++++ sayaca (sıfırıncı hücreye) 10 değerini ata
[ sıradaki dört hücreye 70/100/30/10 değerlerini atamak için döngü kullan
> +++++ ++ 1. hücreye 7 ekle
> +++++ +++++ 2. hücreye 10 ekle
> +++ 3. hücreye 3 ekle
> + 4. hücreye 1 ekle
<<<< - sayacın (sıfırıncı hücrenin) değerini düşür
]
> ++ . 'H' yaz
> + . 'e' yaz
+++++ ++ . 'l' yaz
. 'l' yaz
+++ . 'o' yaz
> ++ . ' ' yaz
<< +++++ +++++ +++++ . 'W' yaz
> . 'o' yaz
+++ . 'r' yaz
----- - . 'l' yaz
----- --- . 'd' yaz
> + . '!' yaz
> . 'n' yaz
8 adet komut karakteri dışındaki tüm karakterleri yok saydığı için yorum eklemek için söz dizimine gerek yok.
Komut | C karşılığı | Anlamı |
---|---|---|
> | ++ptr; | İşaretçiyi bir sonraki hücreye kaydırır. |
< | –ptr; | İşaretçiyi bir önceki hücreye kaydırır. |
+ | ++(*ptr); | İşaretçinin bulunduğu hücreyi 1 bayt arttırır. |
– | –(*ptr); | İşaretçinin bulunduğu hücreyi 1 bay azaltır. |
. | putchar(*ptr); | İşaretçinin bulunduğu hücredeki baytı yazdır. |
, | *ptr=getchar(); | Girdiden bir baytlık veri al ve hücreye yaz. |
[ | while (*ptr){ | Eğer hücre değeri sıfırsa ] karakterinden sonraya atla. |
] | } | Eğer hücre değeri sıfır değilse sonraki komuta atla. |
Velhasıl kelam, böyle cins bir dil koymuş ortaya Urban Müller, benim hoşuma gitti (adam trollabi ya!).