← A–Z Röportajları

INTERCAL

Bu röportajda Computerworld, daha az ciddi bir yola sapıyor ve INTERCAL’in geliştirilmesi ve kullanımları hakkında Don Woods ile sohbet ediyor. Woods şu anda, şirketin Postini’yi yakın zamanda satın almasının ardından Google’da çalışıyor ve Will Crowther ile birlikte orijinal Adventure oyununu birlikte yazmasıyla tanınıyor. Ayrıca The Hackers Dictionary’nin de ortak yazarlarındandır. Burada onunla, parodiyle ilgili her şey ve bademciklerin çıkarılabilir organlar olarak erdemleri hakkında konuşuyoruz.

Siz ve James Lyon böyle ayrıntılı bir parodi dili geliştirme dürtüsünü nasıl edindiniz?

Tam olarak emin değilim. Orijinal başvuru kılavuzunun önsözünde belirtildiği gibi, fikri (ve ilk tasarımın büyük bölümünü) gecenin ilerleyen saatlerinde ortaya koyduk. Henüz – bir bakalım, birinci sınıf yılımızın sonu olmalıydı – final sınavlarımızı bitirmiştik ve fazlasıyla coşkuluyduk!

Yıllar sonra biraz bulanıklaşmış olsa da hatırladığım kadarıyla, biz ve başka bir arkadaş daha, daha önceki bir gece yarısı sohbetinde, konuşulan noktalama işaretleri için alternatif adlar (spot, spark, spike, splat, wow, what vb.) buluyorduk ve bu, bir şekilde çıkış noktası olmuş olabilir.

Neden özellikle Fortran ve COBOL ile alay etmeyi seçtiniz?

Seçmedik. (Wikipedia her ne kadar seçtiğimizi iddia ediyor olsa da.) Zamanın dilleriyle, ya da en azından aşina olduğumuz dillerle alay ettik. (Ben şahsen hiç COBOL öğrenmedim, gerçi Jim Lyon’un dili bildiğine inanıyorum.) Kılavuzda, kendimizi hangi dillerle karşılaştırdığımız bile listeleniyor.

Ve sonra o dönemin başvuru kılavuzlarını, özellikle de IBM belgelerini taklit ettik; yine çünkü en çok aşina olduğumuz şeyler bunlardı. Kabul etmek gerekir ki dil, örneğin SNOBOL ya da APL’den ziyade Fortran’a daha çok benziyor; ama zaten çoğu bilgisayar dili de böyledir.

Compiler Language With No Pronounceable Acronym adı neyi tetikledi? Ve bu isimden INTERCAL’i nasıl elde ettiniz?

Sanırım aslında INTERCAL adıyla başladık. Nereden geldiğinden emin değilim; muhtemelen kulağa hoş geliyordu. (Fortran’ın “Formula Translation”ın kısaltması olması gibi, INTERCAL de “Interblah Calculation” gibi bir şeyin kısaltması olmalıymış gibi duruyor.) Daha spesifik bir etimoloji hatırlamıyorum.

Sonra bir kısaltma bulmak istediğimizde, içimizden biri paradoksal olan “Compiler Language With No Pronounceable Acronym”u düşündü.

INTERCAL’i geliştirmek ne kadar sürdü? İlk geliştirme döneminde öngörülmeyen herhangi bir sorunla karşılaştınız mı?

“Geliştirmek”ten ne kastettiğinize bağlı. Dili çok fazla zorlanmadan tasarladık. Kılavuzu yazmak biraz zaman aldı; özellikle de anlamsız çizimler olarak eklediğimiz devre şemaları gibi şeyler için.

Derleyicinin kendisi de aslında pek sorun olmadı; zira ne derleyicinin ne de derlenmiş kodun performansını optimize etmekle hiç ilgilenmiyorduk. Derleyicimiz INTERCAL programını SNOBOL’a (aslında SNOBOL’un derlenebilir bir sürümü olan SPITBOL’a) dönüştürüyor ve INTERCAL veri türlerini, tüm karakterleri 0 ve 1 olan karakter dizeleri kullanarak temsil ediyordu.

Şu anda C-INTERCAL veya CLC-INTERCAL kullanıyor musunuz?

Hayır, ancak alt.lang.intercal haber grubunu takip ediyorum ve ara sıra oraya mesaj gönderiyorum.

INTERCAL ile gerçekten işe yarayan faydalı bir şey yazmayı hiç denediniz mi? Başkaları denedi mi?

Ben, hayır. Başkaları yaptı. INTERCAL’i (muhtemelen bazı G/Ç uzantılarıyla) Bugs and Loops adlı oyunu oynamak için kullanan bir Web sayfası gördüğümü hatırlıyorum. Bu oyunda oyuncular, makinenin bandının sonuna gelmeden ya da sonsuz bir döngüye girmeden mümkün olduğunca uzun süre çalışmasını sağlamaya çalışan bir Turing makinesine kurallar ekler.

Dilin 1972’de ortaya çıkmış olmasına ve varyasyonlarının hâlâ sürdürülmesine bakınca ne hissediyorsunuz? Artık kendinize ait adanmış bir parodi programcı kitleniz olduğunu düşünüyor musunuz?

İtiraf etmeliyim ki bu kadar uzun ömürlü olmasına şaşırıyorum. Özgün çalışmadaki bazı şakalar bu noktada oldukça eskimiş hissi veriyor. Dilin, “COME FROM” ifadesi ve taban 3’te çalışan işleçler gibi, diğer dillerde eksik olan tuhaf özelliklerin tartışılabildiği bir alan sunması işe yarıyor.

Ve hayır, bir “takipçi”m olduğunu düşünmüyorum; ancak arada sırada, birinin hevesli bir INTERCAL meraklısı çıkmasıyla hazırlıksız yakalanıyorum. Aylar önce Google’a katıldığımda, biri görünüşe göre gelişimi fark etmiş ve Google’ın C++, Java ve diğer diller için olan kılavuzlarının yanına INTERCAL için bir stil kılavuzu eklemeyi önermek için fırsatı kullanmış. (Öneri reddedildi, ancak önerilen stil kılavuzu hâlâ şirket içinde erişilebilir.)

Başvuru kılavuzundaki şu ifadeyi yazarken aklınızda belirli bir kişi var mıydı: “Anlaşılmaz olan bir iş yapan bir kişinin yüksek itibara sahip olduğu, iyi bilinen ve sıkça gösterilmiş bir gerçektir”?

Tuhaf bir şekilde, sanırım aklımızda belirli biri yoktu.

INTERCAL programı sergileyerek üstün teknik bilgisini gösterdiği için terfi alan birini tanıyor musunuz?

Heh, hayır.

Kılavuzun dipnotlarında şöyle deniyor:

“Diğer tüm başvuru kılavuzlarında Ekler bulunduğundan, INTERCAL kılavuzunun başka bir tür çıkarılabilir organ içermesine karar verildi.”

Ek’i çıkarmak istemenizi anlıyoruz; kimse onları sevmez ve hiçbir işe yaramazlar, ancak bademcikler çok daha kullanışlı görünüyor. Çıkarılabilir tek organ olarak bademciği seçme kararınızdan pişman mısınız?

Hayır, buna pek kafa yormadım. Ek’i dahil etmeme noktasını vurgulayabilmek için ikinci bir çıkarılabilir organ bulmuş olmaktan memnunduk. Ayrıca, çıkarılabilir olması, ona sahip olmanın faydalı olmadığı anlamına gelmez!

INTERCAL’i Turing-tam yapmakta zorlandınız mı?

Zorlandık mı? Hayır. Dilin tam olduğundan emin olmak istedik, ama bunu göstermek o kadar da zor değildi.

Wikipedia’daki şu nokta gibi, dile yöneltilen eleştirilere nasıl yanıt veriyorsunuz?

“65536’dan küçük tüm asal sayıları hesaplayan bir Eratosthenes Eleği ölçütü Sun SPARCStation-1 üzerinde test edildi. C’de yarım saniyeden az sürdü; aynı program INTERCAL’de on yedi saatten fazla sürdü.”

Affedersiniz? Bu eleştiri değil, övünme! Yüksek seviye bir IBM ana bilgisayarındaki (IBM 360/91) özgün uygulamamızda, tek bir 16 bitlik tamsayı bölme işleminin 30 saniye sürdüğüyle övünürdüm ve bunu bir rekor olarak iddia ederdim!

Bugün INTERCAL’i yeniden geliştirme şansınız olsaydı, farklı yapacağınız bir şey olur muydu?

Eminim değiştireceğim ince noktalar olurdu ve yıllar içinde başkalarının önerdiği (ve bazen uyguladığı) daha yenilikçi özelliklerden bazılarını dahil ederdim. Ayrıca, bazı şakalar ve/veya dil özellikleri artık biraz eskidi; örneğin XOR işlecin bir “V”nin üzerine bindirilmiş bir “−” olması ve bunun, karakterler bir delikli kart üzerinde üst üste basıldığında neye dönüştüğünden bahsetmemiz gibi.

Sizce INTERCAL bilgisayar gelişimine gerçekten faydalı herhangi bir katkıda bulundu mu?

Eğlence sayılır mı? :-) Sanırım, bazı kişilere (Lyon ve ben dâhil) derleyiciler ve benzeri konular hakkında öğrenme fırsatı vermek gibi ikinci dereceden etkiler de var.

Belki daha da önemlisi, alışılmış araçların hiçbirini kullanmadan sorun çözmek zorunda kaldığınızda, bazen yeni şeyler öğrenebilirsiniz. 2003’te Knuth’tan, “bir haftayı INTERCAL programı yazarak geçirdiğini” ve bunu “news” Web sayfasında yayımladığını söyleyen bir not aldım; üzerinde çalışırken de “standart INTERCAL kütüphanesindeki bölme yordamının, daha önce görmediğim gerçekten harika bir hilesi olduğunu” fark ettiğini belirtmişti. Bu hileyi, The Art of Computer Programming’in 4. cildinde bahsederken doğru kişiye atıf yapabilmek için Lyon’dan mı yoksa benden mi çıktığını hatırlayıp hatırlamadığımı soruyordu. (Hatırlayamadım.)

INTERCAL’in geleceğinin nerede olduğunu öngörüyorsunuz?

Hiçbir fikrim yok; zira bu noktaya kadar geleceğini hiç öngörmemiştim!

INTERCAL’i yanlışlıkla ciddi bir programlama dili sanan oldu mu hiç?

Aman Tanrım, umarım olmamıştır! (Gerçi ilk kez benimle iletişime geçtiğinizde sizin öyle yaptığınızdan endişelenmiştim!)

Brain**** gibi başka programlama dillerinden etkilendiniz mi?

Birkaç başka böyle dile baktım ama hiçbiriyle uzun zaman geçirmedim. Açıkçası beni daha çok etkileyenler, inanılmaz derecede güçlü özelliklere sahip (genellikle sınırlı alanlarda) parodi olmayan diller; örneğin APL’nin çok boyutlu işlemleri ya da SNOBOL’un desen eşlemesi. (Güçlü düzenli ifade işleçlerine sahip başka diller varken SNOBOL’a tekrar dönüp bakmak ilgimi çekiyor.)

Başka bir “sınırlı” programlama dilinden etkilenmeye en çok yaklaştığım durum, uzun zaman önce Northeastern University’de yarı zamanlı profesör olan bir iş arkadaşımın bana anlattığı varsayımsal bir bilgisayardı. Bilgisayarın belleği 65.536 bit idi ve her biri 16 bitlik adreslerle tek tek adreslenebiliyordu. Bilgisayarın yalnızca tek bir komut türü vardı; belleğin herhangi bir yerinde başlayabilen, art arda gelen 48 bitten oluşuyordu. Komut, X, Y, Z olmak üzere üç adet 16 bitlik adres olarak yorumlanıyor ve işlem “X konumundaki biti Y konumuna kopyala, ardından Z konumunda başlayan komutu çalıştır” şeklindeydi.

Öğrencilere ilk olarak koşullu bir dallanma oluşturmaları görevi veriliyordu (eğer A biti ayarlıysa B’ye git, değilse C’ye git). Sanırım bir sonraki ödev 16 bitlik bir toplayıcı yapmaktı. İşte bu minimalizm!

Bilgisayar programlama dillerinin yakın gelecekte nereye gittiğini düşünüyorsunuz?

İlginç bir soru, ancak açıkçası bu benim alanım değil; bu yüzden konu üzerine pek düşünmedim. Genel programlama dilleri (Perl, Python, C++, Java, her neyse) ile uygulama düzeyi diller (Web tabanlı araçlar ve benzerlerini geliştirmeye yönelik paketler) arasında büyüyen bir ikilik görmeye devam edeceğimizi bekliyorum. Görünüşe göre şu anda genel programlama dillerini kullanan, ancak mikro kod ya da donanım düzeylerinde neler olup bittiğine dair hiçbir anlayışı olmayan insanlar var.

Yeni yetişen parodi programcılar için herhangi bir tavsiyeniz var mı?

Zaten doldurulmamış bir niş bulmaya çalışın. Hm, biliyor musunuz, SPOOF bir dil için güzel bir isim olurdu. Üstelik adında OO bile var!

Ve son olarak, Bjarne Stroustrup ile daha önce de konuşulduğu üzere, yüz kıllarının programlama dillerinin başarısıyla ilişkili olduğunu düşünüyor musunuz?

Bu teoriyi daha önce görmemiştim, ama oldukça eğlenceli. INTERCAL’i tasarladığımızda yüzümde kıl olduğunu sanmıyorum, ama yıllar içinde daha fazlasını edindim. Belki de INTERCAL’in hâlâ ayakta olmasının nedeni budur?

Eklemek istediğiniz başka bir şey var mı?

Bir anlamda INTERCAL, hacker’lar için nihai dildir; burada ‘hacker’ sözcüğünü, suçla ilgili olmayan eski anlamıyla, mevcut araçların sınırlamalarına rağmen bir şeyi nasıl başarmanın yollarını bulmaktan hoşlanan kişi anlamında kullanıyorum. (The Hacker’s Dictionary’deki tanımlardan biri, ‘Baltayla mobilya yapan kişi’dir.) INTERCAL’in eğlencesinin büyük kısmı, başka dillerde çok basit olacak bir şeyi onunla nasıl yapabileceğini çözmekten gelir. Daha da fazla eğlence, dile tuhaf yeni özellikler eklemekten ve sonra bu özelliklerin yenilikçi kullanımıyla neler yapılabileceğini keşfetmekten doğar.