Ezoterik programlama dili - Esoteric programming language

Bir ezoterik programlama dili (bazen kısaltılmış esolang ) bir olan programlama dili bir şekilde bilgisayar programlama dili tasarım sınırlarını test etmek için tasarlanmıştır, kavram ispatı olarak, yazılım sanatı bir başka dile hack arayüzüne (özellikle de, fonksiyonel programlama veya prosedürel programlama dilleri ) veya şaka olarak. Ezoterik kullanımı, bu dilleri çalışan geliştiricilerin yazılım yazmak için kullandıkları programlama dillerinden ayırır. Görsel- uzaysal sözdizimi gibi bazı ezoterik özellikler sanatta pratik uygulamalara ilham vermiş olsa da, genellikle, bir esolang'ın yaratıcıları ana akım programlama için kullanılacak dili amaçlamazlar . Bu tür diller genellikle bilgisayar korsanları ve hobi sahipleri arasında popülerdir .

Kullanılabilirlik, ezoterik programlama dili tasarımcıları için nadiren bir hedeftir - çoğu zaman tasarım tam tersine yol açar. Genel amaçları, Turing-complete olan veya hatta hesaplama sınıfının bilinmediği bir dili korurken geleneksel dil özelliklerini kaldırmak veya değiştirmektir .

Tarih

Ezoterik bir dilin en eski ve hala kanonik örneği, 1972'de Don Woods ve James M. Lyon tarafından, yazarların aşina oldukları diğer programlama dillerinden farklı olma niyetiyle tasarlanan INTERCAL'dir . Bu parodisini gibi günün kurulan programlama dilleri, unsurları Fortran , COBOL ve montaj dili .

Uzun yıllar boyunca INTERCAL, INTERCAL kılavuzunun yalnızca basılı kopyalarıyla temsil edildi. 1990'da dilin Unix altında C'de bir uygulama olarak yeniden canlanması , ezoterik bilgisayar dillerinin kasıtlı tasarımına bir ilgi dalgasını uyardı.

1993'te Wouter van Oortmerssen , kodu doğal olarak karışık, kafa karıştırıcı ve okunamaz hale getirmek için tasarlanmış sözdizimi ile küçük bir yığın yönelimli programlama dili olan FALSE'i yarattı . Ayrıca yalnızca 1024 baytlık bir derleyiciye sahiptir. Bu, Urban Müller'e daha da küçük bir dil yaratması için ilham verdi , sadece sekiz tanınmış karakterden oluşan , şimdilerde kötü bir üne sahip olan beyin fırtınası . Chris Pressey'in Befunge'si (FALSE gibi, ancak iki boyutlu talimat işaretçisi ile) ile birlikte, brainfuck artık en iyi desteklenen ezoterik programlama dillerinden biridir. Bunlar, minimal Turing tarpitlerinin ve gereksiz yere karıştırılmış dil özelliklerinin kanonik örnekleridir . Brainfuck, Turing makinelerinin P′′ ailesi ile ilgilidir .

Örnekler

Befunge

Befunge , talimat işaretçisinin kod boyunca birden çok boyutta dolaşmasına izin verir. Örneğin, aşağıdaki program, karakterleri yığına ters sırayla iterek ve ardından karakterleri >, :, v, _, ,, ve yönergeleri arasında saat yönünde dolaşan bir döngüde yazdırarak "Merhaba Dünya" görüntüler ^.

 "dlroW olleH">:v
              ^,_@

İkili lambda hesabı

İkili lambda hesabı , 29 baytlık bir öz yorumlayıcı, 21 baytlık bir asal sayı elek ve 112 baytlık bir Brainfuck yorumlayıcısı içeren, en minimal araçlarla mümkün olan en yoğun koda izin vermek için algoritmik bir bilgi teorisi perspektifinden tasarlanmıştır .

beyin sikişi

Brainfuck , aşırı minimalizm için tasarlanmıştır ve yalnızca sekiz farklı karakter içeren programlarla karışık kodlara yol açar. Aşağıdaki program çıktısı "Merhaba Dünya!":

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

Şef

Chef by David Morgan-Mar , programların yemek tarifleri gibi görünmesini sağlamak için tasarlanmış yığın odaklı bir programlama dilidir . Programlar bir başlık, bir değişkenler listesi ve bunların veri değerlerinden ve bir yığın işleme talimatları listesinden oluşur. Şakacı bir tasarım ilkesi, "program tariflerinin yalnızca geçerli çıktılar üretmemesi gerektiğini, aynı zamanda hazırlanması kolay ve lezzetli olması gerektiğini" belirtir ve Morgan-Mar , "101 yumurta" ve "111 fincan yağ" içeren örnek bir Hello World programının " bir kişi için çok fazla yiyecek."

FRAKRAN

Bir FRACTRAN programı, bir ilk pozitif tamsayı girişi ile birlikte pozitif kesirlerin sıralı bir listesidir . Program, tamsayı, tamsayı olan listedeki ilk kesir ile çarpılarak çalıştırılır . Tamsayı daha sonra ile değiştirilir ve kural tekrarlanır. Listede hiçbir kesir ile çarpıldığında bir tamsayı üretmezse, program durur. FRACTRAN, matematikçi John Conway tarafından icat edildi .

GolfScript

GolfScript'teki programlar, değerleri olarak kod blokları olan değişkenler dışında, karşılaşıldığında her biri yığına itilen öğe listelerinden oluşur, bu durumda kodun çalıştırılması.

İNTERKAL

INTERCAL , "Derleyici Dili Olmayan Telaffuz Edilebilir Kısaltma" kısaltması , 1972'de o zamanki çeşitli programlama dillerinin özelliklerini hicvetmek için bir parodi olarak oluşturuldu.

JSFuck

JSFuck kodu yalnızca altı karakter kullanılarak yazılmış JavaScript, bir ezoterik programlama tarzıdır: [, ], (, ), !, ve +. Kendi derleyicisini veya yorumlayıcısını gerektiren Brainfuck'tan farklı olarak, JSFuck geçerli JavaScript kodudur, yani JSFuck programları JavaScript'i yorumlayan herhangi bir web tarayıcısında veya motorunda çalıştırılabilir.

LOLCODE

LOLCODE konuşmasını benzemeye tasarlanmıştır kedicikler . Aşağıdaki "merhaba Dünya" örneğidir:

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

LOLCODE, çok ezoterik olmadığı, aksine alışılmadık bir kelime dağarcığına sahip sıradan bir prosedür dili olduğu için sıklıkla eleştirilir.

malbolge

Malbolge (Cehennemin 8. dairesi), en zor ve ezoterik programlama dili olarak tasarlanmıştır. Diğer özelliklerin yanı sıra, kod tasarım gereği kendi kendini değiştirir ve bir talimatın etkisi onun bellekteki adresine bağlıdır.

Piet

'Piet' yazdıran Piet programı
Piet'te bir "Merhaba Dünya" programı

Piet , programları soyut sanata benzeyen bitmapler olan David Morgan-Mar tarafından tasarlanan bir dildir . Derleme, görüntünün etrafında sürekli renkli bir bölgeden diğerine hareket eden bir "işaretçi" tarafından yönlendirilir. İşaretçi bir bölgeden çıktığında prosedürler gerçekleştirilir.

Davranışın belirtildiği 20 renk vardır: 6 adımlı ton döngüsü ve 3 adımlı parlaklık döngüsü ile sıralanan 18 "renkli" renk; ve sipariş edilmeyen siyah beyaz. "Renkli" bir renkten çıkarken ve başka bir renge girerken, gerçekleştirilen prosedür, ton ve parlaklıktaki değişim adımlarının sayısına göre belirlenir. Siyah girilemez; işaretçi siyah bir bölgeye girmeye çalıştığında, bunun yerine bir sonraki bloğu seçme kuralları değiştirilir. Tüm olası kurallar denenirse program sonlandırılır. Resmin sınırları dışındaki bölgeler de siyah olarak kabul edilir. Beyaz işlemleri gerçekleştirmez, ancak işaretçinin "geçmesine" izin verir. Belirtilen 20 dışındaki renklerin davranışı derleyiciye veya yorumlayıcıya bırakılır.

Değişkenler, tek bir yığında işaretli tamsayılar olarak bellekte saklanır . Belirtilen prosedürlerin çoğu bu yığın üzerindeki işlemlerle, diğerleri girdi/çıktı ile ve derleme işaretçisinin hareket ettiği kurallarla ilgilenir.

Piet, adını Hollandalı ressam Piet Mondrian'dan almıştır . Başlangıçta amaçlanan isim olan Mondrian , açık kaynaklı bir istatistiksel veri görselleştirme sistemi için zaten alındı.

Shakespeare

Shakespeare , programları Shakespeare oyunlarına benzetmek için tasarlanmıştır. Örneğin, aşağıdaki ifade programda GOTO tipi bir ifadeyle ulaşılabilen bir noktayı bildirir:

Act I: Hamlet's insults and flattery.

Unlambda

Unlambda , SKI matematiğine dayalı minimalist bir işlevsel programlama dilidir , ancak birinci sınıf süreklilikler ve zorunlu G/Ç ile birleştirilmiştir (giriş genellikle sürekliliklerin kullanılmasını gerektirir).

Beyaz boşluk

Boşluk yalnızca boşluk karakterlerini (boşluk, sekme ve dönüş) kullanır ve diğer tüm karakterleri yok sayar ve bu nedenle yorumlar için kullanılabilir. Bu, farklı boşluk karakterleri arasında ayrım yapmayan, sekme ve boşluğa aynı davranan birçok geleneksel dilin tersidir. Ayrıca, Boşluk programlarının C gibi dillerdeki programların kaynak kodunda gizlenmesine izin verir.

Kültürel bağlam

Esolangs kültürel bağlam gibi, kod sanat ve kod şiirine benzer olarak esolangs görerek, "komuta ve kültürel ifade ve ret yönünde denetiminden vardiya dikkat" o esolangs yazıyor Geoff Cox tarafından incelenmiştir Mez Breeze 'ın mezangelle . Daniel Temkin, Brainfuck'ı "insan ifadesi ile montaj kodu arasındaki sınırı hafifletmeyi reddederek ve böylece bizi gülünç bir mantık yolculuğuna çıkararak" insan düşüncesi ile bilgisayar mantığı arasındaki doğal çelişkiyi ortaya çıkaran olarak tanımlar. Bir esolang içindeki programlamayı , mantık kurallarını kodda oynamanın dilin bakış açısını netleştirdiği Fluxus hareketininkiler gibi bir olay puanı gerçekleştirmeye bağlar .

Referanslar

daha fazla okuma

Dış bağlantılar