İNTERKAL - INTERCAL

INTERCAL yazarlarından Don Woods , 2010 yılında
INTERCAL'in diğer yazarı Jim Lyon, 2005'te

Derleyici Dil grubu No Pronounceable kısaltması ( INTERCAL ) bir olduğunu ezoterik programlama dili bir şekilde oluşturulduğu parodi tarafından Don Woods ve James M. Lyon  [ ru ] , iki Princeton Üniversitesi 1972'de, öğrenciler çeşitli programlama dillerinin It satirizes yönleri de 1960'larda önerilen dil yapılarının ve notasyonlarının çoğalmasının yanı sıra zaman.

INTERCAL lehçelerinin sürdürülen iki uygulaması vardır: Eric S. Raymond ve Alex Smith tarafından sürdürülen C-INTERCAL (1990'da oluşturulmuştur) ve Claudio Calvelli tarafından sürdürülen CLC-INTERCAL. Mart 2021 itibariyle, her iki uygulama da Debian Yazılım Arşivi'nde mevcuttu.

Tarih

Yazarların orijinal kılavuzuna göre,

Derleyicinin tam adı, bariz nedenlerle "INTERCAL" olarak kısaltılan "Derleyici Dili Olan Telaffuz Edilebilir Kısaltma"dır.

Orijinal Princeton uygulamasında delikli kartlar ve EBCDIC karakter seti kullanılmıştır. INTERCAL'in ASCII kullanan bilgisayarlarda çalışmasına izin vermek için, iki karakterin değiştirilmesi gerekiyordu: mingle operatörü olarak $değiştirilmiştir , "donanımla ilgili olarak artan yazılım maliyetini temsil etmektedir" ve tekli dışlayıcı olarak değiştirilmiştir. -veya operatörün "ortalama kişinin ilk karşılaşmadaki tepkisini doğru bir şekilde ifade etmesi-veya". C-INTERCAL'in son sürümlerinde, eski operatörler alternatif olarak desteklenmektedir; INTERCAL programları artık ASCII , Latin-1 veya UTF-8 olarak kodlanabilir . ¢?

Sürüm numaraları

C-INTERCAL, geleneğe kıyasla büyük ve küçük sürüm numaralarını değiştirir. HISTORY dosyası, sürüm 0.3'ten başlayan ve Mayıs 2020 itibariyle 0.31'e ilerleyen ancak 0.26 ile 0.27 arasında 1.26 içeren sürümleri gösterir.

CLC-INTERCAL sürüm numaralandırma şeması, sürüm 0.06'ya kadar gelenekseldi ve bu şema, README dosyasında belgelenen şemaya dönüştüğünde şöyle diyor:

* "Sürüm" terimi, doğruluk açısından "sapkınlık" ile değiştirilmiştir.

* Sapma sayısı, tamsayı ve kesirli kısım için bağımsız işaretleri olan bir kayan nokta sayısından oluşur. Negatif kesirler ön çıkışları gösterir (yani 1.-94, "1.00'den önce gitmek için 94 ön çıkış" anlamına gelir. Veya sadece sayıları toplayıp 0.06 elde edebilirsiniz, bu tamamen bir tesadüf çünkü 0.06 geliştirilmiyor)

* Bir sapma sayısının kesirli kısmı tamsayı veya kayan nokta olabilir, bu kısımlar için benzer bir anlam taşır. Geçerli ön kaçış 1.-94.-2'dir, bu da "1.-94 öncesi kaçıştan önce gitmek için 2 ön ön kaçış" anlamına gelir.

Ayrıntılar

INTERCAL'in diğer tüm bilgisayar dillerinden tamamen farklı olması amaçlanmıştır. Diğer dillerdeki yaygın işlemler INTERCAL'de şifreli ve gereksiz sözdizimine sahiptir. INTERCAL Referans Kılavuzundan:

İşi anlaşılmaz olan bir kişinin yüksek itibara sahip olduğu bilinen ve sıklıkla gösterilen bir gerçektir. Örneğin, 32 bitlik bir INTERCAL değişkeninde 65536 değerini saklamanın en basit yolunun şu olduğunu söylemek gerekirse:

DO :1 <- #0¢#256

aklı başında herhangi bir programcı bunun saçma olduğunu söyleyebilirdi. Bu gerçekten de en basit yöntem olduğu için, programcı patronunun önünde aptal gibi görünecekti, patronların yaptığı gibi, elbette ortaya çıkacaktı. Etki, programcının doğru olması için daha az yıkıcı olmayacaktı.

INTERCAL, programcı için estetik açıdan daha da nahoş hale getirmek için tasarlanmış birçok başka özelliğe sahiptir: "OKUYUN", "IGNORE", "UNUT" gibi ifadeler ve "LÜTFEN" gibi değiştiriciler kullanır. Bu son anahtar sözcük, programın derleyici tarafından reddedilmesine iki neden sağlar: "PLEASE" yeterince sık görünmüyorsa, program yeterince kibar olarak kabul edilir ve hata mesajı şunu söyler; çok sık ise, program aşırı kibar olduğu için reddedilebilir. Bu özellik orijinal INTERCAL derleyicisinde mevcut olmasına rağmen, belgelenmemiştir.

Dilin kasıtlı olarak geniş ve sözcüklü sözdizimine rağmen, INTERCAL yine de Turing-tamamlanmıştır : yeterli bellek verildiğinde INTERCAL, Evrensel Turing makinesinin çözebileceği herhangi bir sorunu çözebilir. Ancak INTERCAL'in çoğu uygulaması bunu çok yavaş yapar. Bir Erastotenes Elek az 65536 daha asal sayıları işlem kriter, bir test edildi güneş SPARCStation 1 1992 yılında C, daha az yarım saniye daha sürmüştür INTERCAL'deki aynı program on yedi saatten fazla sürdü.

belgeler

INTERCAL Referans Kılavuzundaki "devre şeması", sözde "seç" operatörünün çalışmasını açıklamak için

INTERCAL Referans Kılavuzu birçok paradoksal, anlamsız veya mizahi talimat içerir:

Dikkat! Kafa karıştırıcı durumlar dışında, hiçbir koşulda ağı serpiştirme operatörüyle karıştırmayın!

Kılavuz ayrıca, bu dipnotta açıklandığı gibi bir " bademcik " içerir : "4) Diğer tüm referans kılavuzlarının ekleri olduğundan, INTERCAL kılavuzunun başka bir tür çıkarılabilir organ içermesi gerektiğine karar verildi.

INTERCAL kılavuzu, alfanümerik olmayan tüm ASCII karakterlerine olağandışı adlar verir : tek ve çift tırnak sırasıyla "kıvılcım" ve "tavşan kulağı"dır. (İstisna ve işaretidir : Jargon Dosyasının belirttiği gibi, "daha saçma ne olabilir?") Diğer birçok programlama dilinde eşittir işareti (INTERCAL'in "yarım ağ") olarak gösterilen atama operatörü, INTERCAL'de bir sol oktur , <-, bir "açı" ve bir "solucan"dan oluşur, açıkça "alır" olarak okunur.

Sözdizimi

Girdi ( WRITE INtalimat kullanarak ) ve çıktı ( READ OUTtalimat kullanarak ) olağan biçimleri kullanmaz; INTERCAL-72'de, WRITE IN, İngilizce rakamlar olarak yazılan bir sayıyı girer (Altı BEŞ BEŞ ÜÇ BEŞ gibi) ve READ OUT bunu "kasaplanmış" Romen rakamlarıyla verir . Daha yeni sürümlerin kendi G/Ç sistemleri vardır.

Yorumlar, NOT veya N'T içeren ters çevrilmiş ifade tanımlayıcıları kullanılarak elde edilebilir; bunlar, hatların başlangıçta hiçbir etkisi olmayacak şekilde MUHAFAZA EDİLMESİNE neden olur. (Bir satır, geçerli söz dizimine sahip olmasa bile kaçınılabilir; sözdizimi hataları, çalışma zamanında ve ancak o zaman satır ÇEKİNMEDIĞINDA meydana gelir.)

Veri yapıları

INTERCAL-72 (INTERCAL orijinal versiyon) sadece dört vardı veri türleri 16: bit tamsayı , (a ile temsil edilen .bir "nokta" olarak adlandırılır), 32 bit tamsayı ( :bir "twospot"), bir dizi 16 -bit tamsayılar ( ,, bir "kuyruk") ve 32-bit tamsayılar dizisi ( ;, bir "karma"). Numaralandırılmış her tür 65535 mevcut değişkenler vardır .1için .65535, örneğin 16-bit tamsayı için. Bununla birlikte, bu değişkenlerin her birinin üzerine itilip atılabileceği (INTERCAL terminolojisinde STASHed ve RETRIEVEd), veri yapılarının olası karmaşıklığını artıran kendi yığını vardır . INTERCAL'in daha modern versiyonları, uygun değişikliklerle, genel olarak aynı veri yapılarını korumuştur; Sayıların temsil edildiği sayı tabanını değiştiren TriINTERCAL, 16 bitlik bir tip yerine 10 tritlik bir tip kullanabilir ve CLC-INTERCAL, "sınıflar ve dersler" gibi kendi veri yapılarının çoğunu uygular. temel veri türleri, yeni türler eklemek yerine daha fazla bilgi depolar. Diziler, sanki skaler bir değişkenmiş gibi atanarak boyutlandırılır . Sabitler de kullanılabilir ve ondalık sayı #olarak yazılan sabitin kendisi tarafından takip edilen bir ("ağ") ile temsil edilir ; yalnızca 0 ile 65535 arasındaki tamsayı sabitleri desteklenir.

operatörler

INTERCAL-72'de sadece beş operatör vardır. Uygulamalar, hangi karakterlerin hangi işlemi temsil ettiğine göre değişir ve birçoğu birden fazla karakteri kabul eder, bu nedenle birçok operatör için birden fazla olasılık verilir.

INTERCAL operatörleri
Şebeke INTERCAL-72 karakter C-INTERCAL karakterleri CLC-INTERCAL karakterleri
ARA / KARIŞTIRMA c geri almak / ¢, $, cgeri al/ ¢
SEÇ ~ ~ ~
VE & & &
VEYA V V V
XOR V geri almak - Vgeri alan -, ?, Vgeri alan -,¥

Diğer dillerin çoğunun aksine AND, OR ve XOR, argümanlarının ardışık bitleri üzerinde çalışan tekli operatörlerdir; En anlamlı bit sonuç operatör girdisinin en önemli ve en önemli biti için uygulanan, sonucun ikinci en anlamlı bit operatörün en ve ikinci en önemli bitleri uygulanan üçüncü bir sonucun en anlamlı biti, ikinci en ve üçüncü en bitlere uygulanan operatördür, vb. Operatör, bir değişken adı veya sabiti belirten noktalama işareti ile onun hangi değişken olduğunu belirten sayı arasına veya sadece gruplama işaretlerinin içine (yani C gibi programlama dillerinde olduğundan bir karakter sonrasına ) yerleştirilir. SELECT ve INTERLEAVE (ki bunlar MINGLE olarak da bilinir) infix ikili operatörleridir; SELECT, ilk işleneninin ikinci işleneninin "1" bitlerine karşılık gelen bitlerini alır ve "0" bitlerine karşılık gelen bitleri kaldırır, en az anlamlı bite doğru kaydırır ve sıfırlarla doldurur (böylece 51 (1 1 0 0 1) 1 ikili dosyada) SELECT 21 (ikili sistemde 10101) 5'tir (ikili dosyada 101 )); MINGLE, birinci ve ikinci işlenenlerinden bitleri değiştirir (böyle bir şekilde, ikinci işleneninin en az anlamlı biti, sonucun en az anlamlı bitidir). Operatör önceliği yoktur; gruplama işaretleri, aksi takdirde belirsiz olacağı durumlarda önceliği ortadan kaldırmak için kullanılmalıdır (mevcut gruplama işaretleri ', başka bir kıvılcımla eşleşen ("kıvılcım") ve "başka bir tavşan kulağıyla eşleşen ("tavşan kulakları"); programcı sorumludur ifadeyi belirsiz kılacak şekilde bunları kullanmak için).

Kontrol Yapıları

INTERCAL deyimlerinin tümü bir "ifade tanımlayıcısı" ile başlar; INTERCAL-72 içinde, bu olabilir DO, PLEASEya da PLEASE DOprograma aynı anlama (ancak bunlardan birini kullanarak çok ağır reddedilmesine programı, bir sebep hepsi, belgesiz özelliği C- sözü edilen INTERCAL-72 içinde INTERCAL kılavuzu) veya ters çevrilmiş bir form ( tanımlayıcıyla birlikte NOTveya N'Tona eklenmiş). Modern bir varyant olan geri izleme INTERCAL, MAYBEbir seçim noktası tanıtan bir ifade tanımlayıcısı olarak (muhtemelen PLEASE veya DO ile birleştirilmiş) varyantların kullanılmasına da izin verir . Tanımlayıcıdan önce isteğe bağlı bir satır numarası (parantez içine alınmış bir tam sayı) verilebilir; tanımlayıcıdan sonra, %50varsayılan olarak %100 olan biçimde , satırın yürütme şansı yüzdesi verilebilir .

INTERCAL-72'de ana kontrol yapıları NEXT, RESUME ve FORGET'tır. bir çağrı yığınında NEXT olmasaydı yürütülecek bir sonraki satırı hatırlayarak belirtilen satıra dallar (DO dışındaki tanımlayıcılar herhangi bir ifadede kullanılabilir, DO örnek olarak verilmiştir); ifade girişlerini çağrı yığınının tepesinden kaldırır (bu, aksi takdirde 80'den fazla giriş olduğunda meydana gelen hatayı önlemek için yararlıdır) ve ifade girişlerini çağrı yığınından kaldırır ve hatırlanan son satıra atlar. DO (line) NEXTDO FORGET expressionDO RESUME expression

C-INTERCAL ayrıca COME FROM talimatını da yazılı olarak sağlar ; CLC-INTERCAL ve en yeni C-INTERCAL sürümleri ayrıca COME FROM gibi hesaplanmış COME FROM ( ve NEXT FROM) sağlar, ancak NEXT STACK'e bir dönüş adresi kaydeder. DO COME FROM (line)DO COME FROM expression)

Başlangıçta INTERCAL-72'de bulunan program akışını etkilemenin alternatif yolları, değişkenler üzerinde IGNORE ve REMEMBER komutlarını kullanmaktır (bu, değişkene yapılan yazmaların sessizce yok sayılmasına ve yeniden etkili olmasına neden olur, böylece komutlar, bunlara neden olarak devre dışı bırakılabilir). satırlar veya ifade türleri üzerindeki ABSSTAIN ve REINSTATE komutları sırasıyla satırların etkisiz kalmasına veya yeniden etkili olmasına neden olur.

Selam Dünya

Geleneksel "Merhaba, dünya!" programı INTERCAL'in standart programlama dillerinden ne kadar farklı olduğunu gösterir. In C aşağıdaki şekilde okuyabilir:

#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");

    return 0;
}

C-INTERCAL'deki eşdeğer program daha uzundur ve okunması daha zordur:

DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP

lehçeler

Orijinal Woods–Lyon INTERCAL, giriş/çıkış yeteneklerinde çok sınırlıydı : kabul edilebilir tek giriş, rakamların yazılı olduğu sayılardı ve tek çıktı, Roma rakamlarının genişletilmiş bir versiyonuydu .

İnternette mevcut olan C-INTERCAL yeniden uygulaması, dili ezoterik programlama dillerinin adanmışları arasında daha popüler hale getirdi. C-INTERCAL lehçesinin orijinal INTERCAL'den birkaç farkı vardır ve COME FROM ifadesi ve Turing Metin Modeline dayalı metin G/Ç yapma aracı gibi birkaç yeni özellik getirmiştir .

C-INTERCAL'in yazarları, Üçlü sayı sistemine dayanan ve INTERCAL'in operatör setini genelleştiren TriINTERCAL varyantını da yarattılar .

Daha yeni bir varyant, COME FROM'un işlevselliğini çoklu iş parçacığını destekleyecek şekilde genişleten Threaded Intercal'dır .

CLC-INTERCAL, INTERCAL sunucusu olmak da dahil olmak üzere ağ oluşturma işlevi için INTERNET adlı bir kütüphaneye sahiptir ve aynı zamanda ilk kuantum bilgisayarlara hazır olduğu iddia edilen bir şekilde çok değerli hesaplamalara olanak tanıyan Quantum Intercal gibi özellikler içerir .

2017'nin başlarında GitHub'da .NET Framework'ü hedefleyen bir .NET Uygulaması ortaya çıktı . Bu uygulama, bağımsız ikili kitaplıkların oluşturulmasını ve diğer programlama dilleriyle birlikte çalışmayı destekler.

Etki ve tartışma

"A Box, Darkly: Obfuscation, Garip Diller ve Kod Estetiği" başlıklı makalesinde INTERCAL, "Bütün akıl sağlığınızı terk edin, buraya girenler: INTERCAL" başlığı altında anlatılmaktadır. Derleyici ve yorum stratejisi, açıklanan "garip" özellikler arasındadır:

Uygun şekilde "ick" olarak adlandırılan derleyici parodiyi sürdürür. Derleyicinin anlayamadığı, normal bir dilde derleme hatasına neden olacak herhangi bir şey atlanır. Bu "bağışlayıcı" özellik, hataları bulmayı çok zorlaştırır; ayrıca program yorumları eklemek için benzersiz bir sistem sunar. Programcı, yorumlarının ortasına yanlışlıkla bir miktar geçerli kod yerleştirmemeye dikkat ederek, programın herhangi bir yerine yalnızca derlenemez metin ekler.

"Teknomazoşizm" de Lev Bratishenko, INTERCAL derleyicisini bir dominatrix olarak nitelendiriyor:

LÜTFEN yeterince sık karşılaşılmazsa, program reddedilir; yani, derleyici tarafından açıklama yapılmadan göz ardı edilir. Çok sık ve yine de reddedilecekti, bu sefer sümkürdüğü için. Programlama dillerinde nadiren kullanılan, ancak INTERCAL'de ifadeler olarak görünen diğer kelimelerle birleştiğinde, kod yalvaran biri gibi okunur.

Popüler kültür

İngiliz bağımsız oyun geliştiricisi Nitrome tarafından oluşturulan kurgusal bir video oyun konsolu olan Nitrome Enjoyment System, INTERCAL'de programlanmış oyunlara sahiptir.

Referanslar

Dış bağlantılar