Brainfuck (İngilizce beyin beceren), 1993 yılında programcı Urban Müller tarafından yaratılmış bir programlama dilidir. Yaratılma amacı mümkün olan en küçük boyutlu derleyiciyi üretmektir. Bilinen bazı derleyicileri 200 bayttan küçüktür. Sadece sekiz komutu bulunmakla birlikte Turing-bütün (İngilizce: Turing-complete) bir dil olduğundan teorik olarak herhangi bir algoritma bu dilde yazılıp işletilebilir.
Brainfuck dili çok basit bir makine modeli ile çalışır, bu modelde her birinin başlangıçtaki değeri 0 olan 30000 hücre ve bu hücreler arasında hareket edebilen bir işaretçi bulunur. (İşaretçi, başlangıçta ilk hücrededir)
Bu programlama dilinin amacı, genel bir dil olmaktan çok programcıları zorlamak ve eğlendirmektir.
Komutlar
Her biri sadece tek karakterden oluşan komutları şunlardır;
Komut | Anlamı |
---|---|
> | işaretçiyi bir sonraki hücreye kaydır. |
< | işaretçiyi bir önceki hücreye kaydır. |
+ | işaretçinin bulunduğu hücredeki baytı 1 arttır. |
- | işaretçinin bulunduğu hücredeki baytı 1 azalt. |
. | işaretçinin bulunduğu hücredeki baytı standart çıktı birimine yaz. |
, | standart girdi biriminden bir baytlık girdi al ve bunu işaretçinin bulunduğu hücreye yaz. |
[ | eğer işaretçinin bulunduğu hücrenin değeri sıfırsa, ] karakterinden sonraki komuta atla. |
] | eğer işaretçinin bulunduğu hücrenin değeri sıfır değilse, önceki [ karakterinden bir sonraki komuta atla. |
Ayrıca bu komutların C programlama dilindeki karşılıkları şöyle gösterilebilir;
komut | C karşılığı |
---|---|
> | ++ptr; |
< | --ptr; |
+ | ++(*ptr); |
- | --(*ptr); |
. | putchar(*ptr); |
, | *ptr=getchar(); |
[ | while (*ptr) { |
] | } |
Örnek
Hello World!
Aşağıdaki program ekrana "Hello World!" ve bir yeni satır yazmaktadır:
+++++ +++++ 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 > +++++ ++ birinci hücreye 7 ekle > +++++ +++++ ikinci hücreye 10 ekle > +++ üçüncü hücreye 3 ekle > + dördüncü 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
Bu kod parçası, okunabilirliği sağlamak için satırlara bölünmüş, boşluklar ve yorumlar eklenmiştir. Brainfuck, sekiz komut karakteri +-<>[],.
haricindeki tüm karakterleri yok sayar. Bu nedenle (eklenecek yorum, komut karakterleri içermediği sürece) koda yorum eklemek için özel bir söz dizimine ihtiyaç yoktur. Yukarıdaki kodun fazladan karakterlerden arındırılmış hâli aşağıdaki gibi görünecektir:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
İlk satır a[0] = 10
, dizinin ilk elemanına 0'dan başlayıp 10 kez artırarak ilk değerini atamaktadır. İkinci satırdan başlayan döngü, dizinin diğer elemanlarına değerler atamaktadır: a[1] = 70 ('H' harfinin ASCII kod değeri olan 72'ye yakın bir değer), a[2] = 100
('e' harfinin ASCII değeri 101'e yakın), a[3] = 30
(boşluk karakterinin ASCII değeri 32'ye yakın) ve a[4] = 10
(yeni satır karakteri). Döngü, işaretçiyi dizi elemanları üzerinde kaydırarak a[0]
'ın değeri 10'u sırasıyla 7,10,3 ve 1'le çarpmaktadır. Döngü bittikten sonra a[0]
, 0'a eşit olur.
Döngüden sonraki ilk satırda >
karakteri işaretçiyi dizide bir eleman ilerletmekte, ++
dizi elemanının 70 olan değerini iki artırarak 72 yapmakta ve .
karakteri de sonucu ekrana basmaktadır.
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Brainfuck Ingilizce beyin beceren 1993 yilinda programci Urban Muller tarafindan yaratilmis bir programlama dilidir Yaratilma amaci mumkun olan en kucuk boyutlu derleyiciyi uretmektir Bilinen bazi derleyicileri 200 bayttan kucuktur Sadece sekiz komutu bulunmakla birlikte Turing butun Ingilizce Turing complete bir dil oldugundan teorik olarak herhangi bir algoritma bu dilde yazilip isletilebilir Brainfuck dili cok basit bir makine modeli ile calisir bu modelde her birinin baslangictaki degeri 0 olan 30000 hucre ve bu hucreler arasinda hareket edebilen bir isaretci bulunur Isaretci baslangicta ilk hucrededir Bu programlama dilinin amaci genel bir dil olmaktan cok programcilari zorlamak ve eglendirmektir KomutlarHer biri sadece tek karakterden olusan komutlari sunlardir Komut Anlami gt isaretciyi bir sonraki hucreye kaydir lt isaretciyi bir onceki hucreye kaydir isaretcinin bulundugu hucredeki bayti 1 arttir isaretcinin bulundugu hucredeki bayti 1 azalt isaretcinin bulundugu hucredeki bayti standart cikti birimine yaz standart girdi biriminden bir baytlik girdi al ve bunu isaretcinin bulundugu hucreye yaz eger isaretcinin bulundugu hucrenin degeri sifirsa karakterinden sonraki komuta atla eger isaretcinin bulundugu hucrenin degeri sifir degilse onceki karakterinden bir sonraki komuta atla Ayrica bu komutlarin C programlama dilindeki karsiliklari soyle gosterilebilir komut C karsiligi gt ptr lt ptr ptr ptr putchar ptr ptr getchar while ptr OrnekHello World Asagidaki program ekrana Hello World ve bir yeni satir yazmaktadir sayaca sifirinci hucreye 10 degerini ata siradaki dort hucreye 70 100 30 10 degerlerini atamak icin dongu kullan gt birinci hucreye 7 ekle gt ikinci hucreye 10 ekle gt ucuncu hucreye 3 ekle gt dorduncu hucreye 1 ekle lt lt lt lt sayacin sifirinci hucrenin degerini dusur gt H yaz gt e yaz l yaz l yaz o yaz gt yaz lt lt W yaz gt o yaz r yaz l yaz d yaz gt yaz gt n yaz Bu kod parcasi okunabilirligi saglamak icin satirlara bolunmus bosluklar ve yorumlar eklenmistir Brainfuck sekiz komut karakteri lt gt haricindeki tum karakterleri yok sayar Bu nedenle eklenecek yorum komut karakterleri icermedigi surece koda yorum eklemek icin ozel bir soz dizimine ihtiyac yoktur Yukaridaki kodun fazladan karakterlerden arindirilmis hali asagidaki gibi gorunecektir gt gt gt gt lt lt lt lt gt gt gt lt lt gt gt gt Ilk satir a 0 10 dizinin ilk elemanina 0 dan baslayip 10 kez artirarak ilk degerini atamaktadir Ikinci satirdan baslayan dongu dizinin diger elemanlarina degerler atamaktadir a 1 70 H harfinin ASCII kod degeri olan 72 ye yakin bir deger a 2 100 e harfinin ASCII degeri 101 e yakin a 3 30 bosluk karakterinin ASCII degeri 32 ye yakin ve a 4 10 yeni satir karakteri Dongu isaretciyi dizi elemanlari uzerinde kaydirarak a 0 in degeri 10 u sirasiyla 7 10 3 ve 1 le carpmaktadir Dongu bittikten sonra a 0 0 a esit olur Donguden sonraki ilk satirda gt karakteri isaretciyi dizide bir eleman ilerletmekte dizi elemaninin 70 olan degerini iki artirarak 72 yapmakta ve karakteri de sonucu ekrana basmaktadir