| Brainfuck |
Bu nedir sizce?
Belki inanmayacaksınız ama bu ekrana CAN OZDEMIR yazan programın kaynak kodudur.
Brainfuck Adının hakkını veren bu dil 1993 yılında Urban Müller tarafından en küçük derleyiciyi (200 kb'den az) yaratmak amacıyla tasarlanmış. Üstelik dil tamamen Turing uyumlu... Brainfuck'ta sadece 8 operatör ile harikalaryaratabilirsiniz tabi bu sırada beyin cidden fucked bir kıvama gelir. Sadece ekrana adımı yazdırmak bile bana yıldızları saydırttı açıkçası... Ubuntu'da brainfuck derleyicisini yüklemek için uçbirimden,
komutunu vermeniz ya da synaptic ile bf paketini yüklemeniz yeterli olacaktır.
Yazdığınız kodları dosyaadı.b gibi kaydettikten sonra kodun bulunduğu satırda uçbirim açarak,
komutunu vermelisiniz.
Brainfuck'ta kullanılan operatörler:
Böyle bakınca hiç anlaşılmıyor olabilir ama Brainfuck'ın temelde yaptığı şey decimal ascii değerleri üstünde bir ileri bir geri dolaşmaktan ibaret. Yani eğer 35 tane "+" (artı) yazıp ardından "." (nokta) koyarsanız 35. Decimal ASCII değerini ekrana yazdırırsını ki bu da "#" işareti demektir.
mesela:
Burada 65 tane "+" ile işaretçiyi decimal 65'e getirdik. Sonra "." ile ulaşılan değerin ekrana yazdırılmasını istedik. 65 sayısı Dacimal ASCII formatında büyük "A" harfine karşılık geldiğinden ekrana A yazılacaktır. Hemen kısa bir ASCII tablosu takdim edelim (Daha geniş kapsamlılarını web üstünde bulabilirsiniz):
Peki biz bu kodu kısaltabilir miyiz?
Dikkat ederseniz burada 8 tane "+" işaretinden sonra sekiz kere dönen bir döngü başlattık ve "<-" ile her dönüşte döngünün başındaki sekiz tane "+" işaretine ulaştık. 8*8=64 olduğuna göre artık A harfine sadece bir adım kalmış demektir. O halde sona bir "+" daha koyup "." işaretiyle çıkış istersek, ekrana A yazılacaktır.
Peki "B" yazmak için ne yapmalıyım? Az önceki koddan sonra aynı koda bir tane daha artı koyarsak B yazabilir miyiz? Bir deneyelim:
Ekran Çıktısı: AJ
Peki neden B yazmadı da J yazdı? Çünkü bir önceki kodda işaretçimiz 65'teydi. Ekrana AB yazdırmak için işaretçiyi bir kademe arttırmak yeterli olacaktır. Aynen Şöyle:
Giriş/Çıkış işlemleri (I/O)
c bilmeyenler için belirtmeliyim. Bu kod kullanıcıdan bir sayı ister ve sonra sayıyı ekrana yazdırır. Aynı kod, örneğin python'da şöyledir:
Brainfuck'ta beni en çok şaşırtan şey ise bu oldu. Yukarıdaki işlemi Brainfuck'ta sadece iki karakterli kod ile yapabiliyoruz.
Güzel değil mi?
Esenlikler...
Yorumlar (11)
!joomlacomment 4.0 Copyright (C) 2009 Compojoom.com . All rights reserved." |
||||||||||||||||||||||||||||||||||||||||

Eğlenceli bir dil. İnsanlara nasıl anlatacağımı bilemediğim eğlenceli ama kodlaması iğrenç ötesi bir dil. MEB bu dili mutlaka müfredata koymalı ve assembly'den sonra lise talebelerine bu dili öğretmeli. :woohoo:
+++++++++++++++++++++++++[>++>+++>++++>+++++-----------.----.+++++++.---.----.+.++++..------.-.+++++++++++++.