İçeriğe atla

Brainfuck

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 (İngilizceTuring-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.

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">Pascal (programlama dili)</span> yüksek seviyeli programlama dili

Pascal bilgisayar programlama dili pek çok öğrenciye bilgisayar programlamayı öğreten ve çeşitli versiyonları bugün hâlâ yaygın olarak kullanılmaya devam eden en önemli programlama dillerinden biridir. İlk Macintosh işletim sisteminin çoğu ve TeX Pascal ile yazılmıştır.

Komut kümesi mimarisi, CPU'nun yazılım tarafından nasıl kontrol edileceğini tanımlayan bilgisayar soyut modelinin bir parçasıdır. ISA, işlemcinin ne yapabileceğini ve bunu nasıl yapacağını belirterek donanım ve yazılım arasında bir arayüz gibi davranır.

QuickBASIC, QBASIC ya da QB, Microsoft şirketi tarafından geliştirilmiş, Microsoft QuickBASIC isimli programlama dilinin belli özellikleri çıkarılarak sadeleştirilmiş halidir. MS-DOS işletim sisteminin belli sürümlerinin parçası olarak sunulmuştur. Adından da anlaşılacağı üzere, yapısal bir BASIC türevidir.

<span class="mw-page-title-main">Derleyici</span> kaynak kodunu bilgisayarın işleyebileceği koda dönüştüren program

Derleyici, kaynak kodu makine koduna dönüştüren yazılımdır. Bir programlama dilinin derleyicisi, o programlama dili kullanılarak yazılmış olan kodu hedef işlemci mimarisine göre uygun şekilde makine koduna derler ve genellikle çıktı olarak yürütülebilir dosyanın oluşturulmasını sağlar. Bu eyleme derleme denir. Bir başka ifadeyle derleyici, bir tür yazı işleyicidir; girdi olarak yazı alır ve çıktı olarak yazı verir.

<span class="mw-page-title-main">Unicode</span> endüstri standartı

Unicode Unicode Consortium organizasyonu tarafından geliştirilen ve her karaktere bir sayı değeri karşılığı atayan bir endüstri standardıdır. Sistemin amacı farklı karakter kodlama sistemlerinin birbiriyle tutarlı çalışmasını ve dünyadaki tüm yazım sistemlerinden metinlerin bilgisayar ortamında tek bir standart altında temsil edilebilmesini sağlamaktır. Evrensel Karakter Kümesi (UCS) olarak bilinen ISO/IEC 10646 standardı ise, her iki organizasyonun işbirliği ile aynı sayısal karşılıkları taşımaktadır. Unicode, son sürümü itibarıyla 129 farklı modern ve tarihî yazım sistemine ait 120.000'den fazla karakteri ve emoji gibi çeşitli sembol kümelerini kapsamaktadır.

<span class="mw-page-title-main">Ada (programlama dili)</span> programlama dili

Ada, yapısal, statik tipli, zorunlu, geniş spektrumlu ve nesne yönelimli bir üst düzey bilgisayar programlama dilidir. Pascal ve diğer dillerin genişletilmiş halidir. Gömülü design-by-contract (DbC), güçlü yazımı, açık eşzamanlı, senkronize mesaj geçişi, korunmuş objeli ve belirsiz bir dildir. Ada kod güvenliğini ve sürdürebilirliğini derleyicide hataları bularak geliştirdi.

<span class="mw-page-title-main">Assembly</span> uygulanan işlemlerle programlama dilinin birbirine çok yakın olduğu düşük seviye programlama dilleri

Assembly dili, bir işlemcinin komut kümesi üzerine tanımlanmış alt seviye bir dildir. Assembly dili kolay hatırlanabilir semboller tanımlar ve böylece işlemcinin makina koduna karşılık gelen sayı dizilerinin bilinmesine gerek kalmaz. Assembly dili, platformdan bağımsız yüksek seviyeli programlama dillerinin aksine, işlemci mimarisine bağımlıdır. Tipik uygulamaları; cihaz sürücüleri, alt seviyeli dahili (embedded) ve gerçek zamanlı sistemlerdir. Bır assembly programı assembler kullanılarak makine koduna çevrilir.

<span class="mw-page-title-main">Bilgisayar mimarisi</span>

Bilgisayar mimarisi, en küçüğe ve en başarılıya ulaşmayı hedeflerken aynı zamanda maliyeti de göz önünde bulundurduğu için sanat ve bilimin ortak buluştuğu nokta olarak da tanımlanır. Bilgisayar Mimarisi, bilgisayar parçalarının iç yapıları ve aralarındaki haberleşme bağlantıları ile ilgilidir.

Bilgisayar biliminde sözdizimsel şeker, alternatif ifade yolları olan bazı ifadelerin kullanımını ve okunmasını kolaylaştıran sözdizimsel ögelere verilen addır. Bu şekilde dilin insanlar tarafından kullanımı kolaylaşır: ifadeler daha net bir şekilde anlatılabilir, bu nedenle bazı insanlar bu alternatif biçimi tercih edebilirler.

Döngü açma, programın çalışmasını hızlandıran döngü dönüştürme yöntemlerinden biridir. Bu yöntem yazılan programın kod satır sayısını artırmaktadır. Döngülerdeki dönüşüm manuel olarak programcı tarafından yapılabileceği gibi kodlar derleyiciler tarafından da düzenlenebilmektedir.

Programlama paradigmaları, programlama dillerini özelliklerine göre sınıflandırmanın bir yoludur. Diller birden fazla paradigma içinde sınıflandırılabilir.

Java platformu dillerinden olan BeanShell, kendi sözdiziminin yanı sıra Java programlama dili sözdiziminin büyük bir bölümünü desteklemesi nedeniyle, Java programlama dilinin komut kabuğu olarak da görülebilir. BeanShell'in bu özelliği, küçük Java kod parçalarının denenmesinde ve Java platformu için yazılmış sınıf dosyalarının yüklenip, birim sınamalarının yapılmasında, düzenle-derle-çalıştır döngüsünü kısaltması sayesinde, büyük kolaylık sağlar.

expr çeşitli ifadeleri hesaplayan ve uygun değeri ekrana basan bir Unix komut satırı aracıdır.

<span class="mw-page-title-main">OpenMP</span>

OpenMP; Solaris, IBM AIX, HP-UX, GNU/Linux, MAC OS X ve Windows işletim sistemleri üzerinde çoğu işlemci mimarisi üzerinde Fortran, C++, C programlama dillerinde çoklu platform paylaşımlı bellek çoklu işlemeyi destekleyen bir uygulama geliştirme arayüzüdür, yani bir API'dir. OpenMP derleyici yönergelerinin kütüphane rutinlerini ve ortam değişkenlerinin çalışma zamanı davranışını etkileyen bir kümesini içerir.

Programlamada, beyaz boşluk tipografide yatay veya dikey alanı temsil eden herhangi bir karakter veya karakter dizisidir. Oluşturulduğunda, bir boşluk karakteri görünür bir işarete karşılık gelmez, ancak genellikle bir sayfadaki bir alanı kaplar. Örneğin, ortak boşluk sembolü U+0020   SPACE, Batı'da kelime bölücü olarak kullanılan betik metinde boş bir noktalama işareti temsil eder.

ALGOL 68, çok daha geniş bir uygulama kapsamı ve daha titiz bir şekilde tanımlanmış sözdizimi ve anlambilim hedefiyle tasarlanmış, ALGOL 60 programlama dilinin halefi olarak tasarlanan programlama dilidir.

Bilgisayar biliminde dizi programlama, işlemlerin bir kerede tüm değerler kümesine uygulanmasına izin veren çözümleri ifade eder. Bu tür çözümler, bilimsel ve mühendislik ortamlarında yaygın olarak kullanılmaktadır.

Tanımsız durum, programlamada bir standartın bir durumu tanımlayamacağı durumlara denmektedir.

Alfred Vaino Aho, Kanadalı bilgisayar bilimci. Programlama dilleri ve derleyiciler konulu çalışmalarıyla tanınmıştır.