Boşluk (programlama dili) - Whitespace (programming language)
Whitespace , Durham Üniversitesi'nde Edwin Brady ve Chris Morris (ayrıca Kaya ve Idris programlama dillerinin geliştiricileri) tarafından geliştirilen ezoterik bir programlama dilidir . 1 Nisan 2003'te ( Nisan Şakası Günü ) yayınlandı. Adı boşluk karakterlerine bir referanstır . Çoğu boşluk karakterini yok sayan veya çok az anlam atayan çoğu programlama dilinden farklı olarak, Boşluk yorumlayıcısı boşluk olmayan karakterleri yok sayar. Yalnızca boşluklar , sekmeler ve satır beslemeleri anlamlıdır . Bu özelliğin bir sonucu olarak, Python gibi sözdizimi geçerliliği için boşluklara bağlı olan ve metni çok dilli yapan diller dışında, bir Boşluk programının başka bir dilde yazılmış bir programın boşluk karakterleri içinde kolayca bulunabilmesidir .
Dil kendisi bir zorunluluk yığın tabanlı dil . Sanal makine programları üzerinde çalıştığı bir yığın ve sahip yığın . Programcı, yığına isteğe bağlı genişlikte tamsayılar göndermekte serbesttir (şu anda kayan noktalı sayıların uygulanması yoktur) ve ayrıca yığına değişkenler ve veri yapıları için kalıcı bir depo olarak erişebilir .
Tarih
Whitespace, 2002 yılında Edwin Brady ve Chris Morris tarafından oluşturuldu. Slashdot , 1 Nisan 2003'te bu programlama dilinin bir incelemesini yaptı .
C++ dili için operatörler olarak boşluk karakterlerini kullanma fikri, beş yıl önce Bjarne Stroustrup tarafından esprili bir şekilde önerildi .
Sözdizimi
Komutlar, boşluk dizilerinden, sekme duraklarından ve satır beslemelerinden oluşur. Örneğin, sekme-boşluk-boşluk, yığındaki en üstteki iki öğenin aritmetik olarak eklenmesini gerçekleştirir. Veriler, boşluklar (0) ve sekmeler (1) kullanılarak ikili olarak temsil edilir ve ardından bir satır beslemesi gelir; bu nedenle, boşluk-boşluk-boşluk-sekme-boşluk-sekme-sekme-satır besleme, ondalık olarak 11 olan ikili sayı 0001011'dir. Diğer tüm karakterler yok sayılır ve bu nedenle yorumlar için kullanılabilir.
Kod, Komut Modifikasyon Parametresi (IMP) olarak yazılır ve ardından işlem yapılır. Aşağıdaki tablo, Boşluktaki tüm IMP'lerin bir listesini gösterir.
IMP | Anlam |
---|---|
[Uzay] | Yığın Manipülasyonu |
[Sekme][Boşluk] | Aritmetik |
[Sekme][Sekme] | Yığın Erişimi |
[Satır besleme] | Akış kontrolü |
[Sekme][Satır Beslemesi] | G/Ç |
Her IMP'yi, o IMP için tanımlanan bir işlem ve gerekirse bir parametre izler. Boşlukta desteklenen işlemlerin listesi:
IMP | Emretmek | Parametre | Anlam |
---|---|---|---|
[Uzay] | [Uzay] | Numara | Sayıyı yığının üzerine itin |
[Uzay] | [LF][Boşluk] | - | Yığındaki en üstteki öğeyi çoğaltın |
[Uzay] | [Sekme][Boşluk] | Numara | Yığındaki (argüman tarafından verilen) n'inci öğeyi yığının üstüne kopyalayın |
[Uzay] | [LF][Sekme] | - | Yığındaki ilk iki öğeyi değiştirin |
[Uzay] | [EĞER EĞER] | - | Yığındaki en üstteki öğeyi atın |
[Uzay] | [Sekme][LF] | Numara | En üstteki öğeyi koruyarak n öğeyi yığından kaydırın |
[Sekme][Boşluk] | [Boşluk][Boşluk] | - | Ek |
[Sekme][Boşluk] | [Boşluk][Sekme] | - | Çıkarma |
[Sekme][Boşluk] | [Boşluk][LF] | - | Çarpma işlemi |
[Sekme][Boşluk] | [Sekme][Boşluk] | - | Tamsayı Bölümü |
[Sekme][Boşluk] | [Sekme][Sekme] | - | Modül |
[Sekme][Sekme] | [Uzay] | - | Yığında saklayın |
[Sekme][Sekme] | [Sekme] | - | Yığından al |
[LF] | [Boşluk][Boşluk] | Etiket | Programda bir yeri işaretleyin |
[LF] | [Boşluk][Sekme] | Etiket | Bir alt programı çağırın |
[LF] | [Boşluk][LF] | Etiket | Bir etikete atla |
[LF] | [Sekme][Boşluk] | Etiket | Yığının üstü sıfırsa bir etikete atla |
[LF] | [Sekme][Sekme] | Etiket | Yığının üstü negatifse bir etikete atla |
[LF] | [Sekme][LF] | - | Bir alt yordamı sonlandırın ve kontrolü arayana geri aktarın |
[LF] | [EĞER EĞER] | - | Programı sonlandır |
[Sekme][LF] | [Boşluk][Boşluk] | - | Yığının en üstündeki karakteri çıkar |
[Sekme][LF] | [Boşluk][Sekme] | - | Yığının en üstündeki sayıyı çıkar |
[Sekme][LF] | [Sekme][Boşluk] | - | Bir karakter okuyun ve onu yığının en üstünde verilen yere yerleştirin |
[Sekme][LF] | [Sekme][Sekme] | - | Bir sayı okuyun ve yığının üst tarafından verilen yere yerleştirin |
"Kopyala" ve "kaydır" işlemleri, Beyaz Alan 0.3'e eklenmiştir ve tüm uygulamalar tarafından desteklenmeyebilir.
Basit kod
Aşağıdaki, basitçe "Merhaba, dünya!" yazdıran yorumlu bir Beyaz Alan programıdır. , burada her Boşluk , Sekme veya Satır Besleme karakterinden önce sırasıyla "S", "T" veya "L" tanımlayıcı yorum gelir:
S S S T S S T S S S L T L S S S S S T T S S T S T L T L S S S S S T T S T T S S L T L S S S S S T T S T T S S L T L S S S S S T T S T T T T L T L S S S S S T S T T S S L T L S S S S S T S S S S S L T L S S S S S T T T S T T T L T L S S S S S T T S T T T T L T L S S S S S T T T S S T S L T L S S S S S T T S T T S S L T L S S S S S T T S S T S S L T L S S S S S T S S S S T L T L S S L L L
Bazı tarayıcılarda Boşluk kaynak kodu görüntülendiğinde, bir sekme karakteri tarafından üretilen yatay aralığın sabit olmadığını, metindeki sonraki yatay sekme durağına göre konumuna bağlı olduğunu unutmayın . Yazılıma bağlı olarak, sekme karakterleri de karşılık gelen değişken sayıda boşluk karakteriyle değiştirilebilir.
Ayrıca bakınız
- Polyglot , birden fazla dilde geçerli bir program
- Steganografi , bir mesajı başka bir mesaj içinde gizleme tekniği
-
Blokların boşluk girintisiyle ifade edildiği ofsayt
kuralı dilleri
- Python , sözdizimsel olarak anlamlı boşluklara sahip bir dilin en iyi bilinen örneği
-
Ezoterik programlama dilleri
- Sadece sekiz basit komuttan ve bir talimat işaretçisinden oluşan Brainfuck
- INTERCAL , " Tercih Edilebilir Kısaltması Olmayan Derleyici Dili"
- LOLCODE bir sonrasında şekillenmiş, serinin ait internet mem
- Programlanması neredeyse imkansız olacak şekilde özel olarak tasarlanmış Malbolge
Referanslar
- ^ a b c d "Boşluk" . Compsoc . Arşivlenmiş orijinal 18 Haziran 2015 tarihinde . Erişim tarihi: 8 Aralık 2015 .
- ^ Timothy (1 Nisan 2003). "Yeni Yalnızca Boşluk Programlama Dili" . Slashdot . 23 Ocak 2014 tarihinde alındı .
- ^ Stroustrup, Bjarne. "C++2000 için Aşırı Yüklemeyi Genelleştirme" (PDF) . Florham Park, NJ, ABD: AT&T Labs . 23 Ocak 2014 tarihinde alındı .
Dış bağlantılar
- Resmi internet sitesi
- Slashdot'ta yayın duyurusu
- Whitespace Corpus Whitespace için yorumlayıcılar, derleyiciler ve programlardan oluşan bir koleksiyon
- Çeşitli komut dosyası dillerinde Boşluk tercümanlarının toplanması
- Acme::Bleach Modülünüzün gövdesini yalnızca boşluk kodlamasına yeniden yazan bir Perl modülü (" gerçekten temiz programlar için").