Tcl’nin geliştiricisi John Ousterhout, Tcl’nin genişletilebilirliği, çeşitli ekosistemi ve NASA’nın Mars Lander projesindeki kullanımı hakkında Computerworld ile konuşmak için zaman ayırdı.
Tcl’nin geliştirilmesine ne sebep oldu?
1980’lerin başı ve ortasında, öğrencilerimle birlikte editörler ve tümleşik devreler için analiz araçları gibi çeşitli etkileşimli uygulamalar yaptık. O günlerde tüm etkileşimli uygulamaların komut satırı arayüzlerine ihtiyacı vardı, bu yüzden her uygulama için basit bir komut dili oluşturduk. Her uygulamanın farklı bir komut dili vardı ve hepsi oldukça zayıftı (örneğin değişkenleri, döngüleri veya makroları desteklemiyorlardı).
Tcl fikri, bu probleme bir çözüm olarak aklıma geldi: güçlü bir komut dili yapmak ve bunu, farklı uygulamaların çekirdeğini oluşturan komut dillerini meydana getirmek üzere çeşitli uygulamalara dâhil edilebilecek bir kütüphane paketi olarak uygulamak.
Dilin çözmeyi hedeflediği belirli bir problem var mıydı?
Tcl için başlangıçtaki hedef
Tcl için başlangıçtaki hedef, güçlü komut dillerine sahip uygulamaların kolayca yapılabilmesini sağlamaktı. O dönemde Tcl’nin tek başına bir programlama dili olarak kullanılacağını öngörmemiştim; gerçi insanların çoğu muhtemelen onu bu şekilde kullandı.
Tk bu resme nasıl uyuyor?
Tcl’nin temel özelliklerinden biri genişletilebilirliktir: dilin bir parçasıymış gibi görünen yeni özellikler eklemek kolaydır (Tcl kullanan uygulamaların kendi işlevlerini kullanıcılara görünür kılmasının yolu budur). Tcl’yi geliştirdiğim sırada grafiksel kullanıcı arayüzleri popülerleşiyordu, ancak GUI uygulamaları yapmak için kullanılan araçlar (X Window System için Motif araç takımı gibi) karmaşıktı, kullanımı zordu ve çok güçlü değildi. Birkaç yıldır grafik araç takımları üzerine düşünüyordum ve bir araç takımını Tcl’ye bir uzantı olarak geliştirebileceğimi fark ettim. Bu, Tk oldu. Tcl’nin esnek ve dize odaklı yapısı, kullanımı basit ama çok güçlü bir araç takımının yapılmasını mümkün kıldı.
Tcl’nin Java’nın geliştirilmesi üzerinde herhangi bir etkisi oldu mu?
Bildiğim kadarıyla Java dili Tcl’den bağımsız olarak geliştirildi. Ancak Java için AWT GUI araç takımı, Tk’de ilk kez görülen bazı özellikleri yansıtır; örneğin ızgara tabanlı bir geometri yöneticisi gibi.
Tcl ekosistemi nasıl?
Tcl ekosistemi o kadar çeşitlidir ki tanımlaması zordur, ancak kabaca iki kampa ayrılır.
Bir yanda, Tcl/Tk’nin asıl katkısının güçlü, çapraz platform GUI araçları olduğuna inanan Tk meraklıları vardır; Tcl/Tk’yi tek başına bir programlama platformu olarak düşünürler ve sürekli daha fazla Tk özelliği için bastırırlar. Diğer yanda ise Tcl’nin en benzersiz yönünün uygulamalara gömülebilmesi olduğuna inanan Tcl safçıları vardır. Bu grup, gömme için kullanılan API’lerin sadeliği ve gücüyle en çok ilgilenen kesimdir. Tcl safçıları, Tk meraklılarının sistemi şişirerek artık gömülemez hâle getirmesinden endişe eder.
Tcl’nin Web uygulamaları dünyasındaki önemi nedir?
Tcl’nin gelişimindeki az sayıdaki hayal kırıklıklarımdan biri, Web uygulaması geliştirmede hiçbir zaman büyük bir faktör hâline gelmemiş olmasıdır. JavaScript ve Python gibi diğer betik dilleri, Tcl’den çok daha büyük bir rol oynamıştır.
Tcl ile yapılan amiral gemisi uygulama hangisiydi?
Tcl’nin gücü, tek bir amiral gemisi uygulamadan ziyade kapsadığı faaliyetlerin genişliğinde yatmıştır. Tcl uygulamalarının çoğu muhtemelen tek bir kişi veya grup tarafından kullanılan küçük uygulamalardır.
Bununla birlikte, NBC yayın kontrol sistemi, Elektronik Tasarım Otomasyonu alanındaki çok sayıda uygulama, ağ yönlendiricileri ve anahtarları için test düzenekleri, Mars iniş aracı yazılımı ve Meksika Körfezi’ndeki petrol platformları için kontrol sistemi dâhil olmak üzere Tcl ile yapılmış birçok büyük uygulama da vardır.
Ne yazık ki bu projeler hakkında çok fazla bilgim yok ve sahip olduğum bilgiler oldukça eski (bu projelerin her ikisini de 1990’ların sonlarında duydum). Petrol platformu projesi için, Tcl/Tk’nin platformun genel işleyişini gözlemlemek ve işlevlerini kontrol etmek üzere merkezi bir yönetim sistemi sağladığına inanıyorum. Mars iniş aracı örneğinde ise, Tcl’nin fırlatma öncesi sistem donanımı ve yazılımının test edilmesinde kullanıldığına inanıyorum.
Dili, başlangıçta amaçlanmayan bir şekilde kullanıldığını hiç gördünüz mü?
Beni en çok şaşırtan şey, insanların Tcl ile büyük programlar yapmış olmasıydı. Dili bir komut satırı aracı olarak tasarladım ve yalnızca çok kısa programlar için kullanılmasını bekliyordum: en fazla birkaç düzine satır. İlk Tcl çalıştayına gittiğimde, milyarlarca dolarlık bir petrol platformunun yarım milyon satır Tcl koduyla kontrol edildiğini duyduğumda neredeyse yere yığılacaktım.
Dilin geliştirilmesi sırasında aşmanız gereken özellikle zor veya sinir bozucu problemler var mıydı?
Uzun yıllar boyunca üzerinde çalıştığımız bir problem, Tcl ve Tk’nin Unix dışındaki platformlarda çalışmasını sağlamaktı. Bu sonunda başarıldı, ancak Unix, Windows ve Macintosh arasındaki farklar o kadar büyüktü ki her şeyi doğru hâle getirmek uzun zaman aldı.
İkinci bir problem dilin hızıydı. Başlangıçta Tcl tamamen yorumlanıyordu: her komut, her çalıştırıldığında bir dizeden yeniden ayrıştırılıyordu. Elbette bu oldukça verimsizdi. Sonunda Brian Lewis, Tcl için 5–10 kat hızlanma sağlayan bir bayt kodu derleyicisi geliştirdi.
Tcl’nin popülerliğinin bir kısmını Tk çerçevesine bağlayabilir misiniz?
Kesinlikle. Daha önce de belirttiğim gibi, Tcl’yi yalnızca Tk için kullanan birçok insan var.
Genel olarak, giderek daha fazla kodlama betik dillerine kayıyor. Tcl’nin uzun betik dili geçmişi göz önüne alındığında bu eğilim hakkında ne düşünüyorsunuz? Tcl bu eğilimden kazanç sağladı mı?
Bence bu eğilim son derece mantıklı. Betik dilleri, yoğun dize işleme yapan veya çok çeşitli bileşen ve hizmetleri entegre etmek zorunda olan uygulama sınıflarını yapmak ve sürdürmek açısından önemli ölçüde kolaylık sağlar. Örneğin, günümüzde Web uygulamalarının çoğu betik dilleriyle yapılmaktadır.
Geriye dönüp baktığınızda, dilin gelişiminde değiştirmek isteyeceğiniz bir şey var mı?
Evet, iki şey. Birincisi, insanların Tcl ile büyük programlar yazacağını bilseydim keşke; bilseydim, dilin tasarımında bazı şeyleri kesinlikle farklı yapardım. İkincisi, dile nesne yönelimli programlama olanaklarını dâhil etmemiş olmam. Buna uzun süre direndim ve geriye dönüp baktığımda yanıldığımı görüyorum. Bunu erken dönemde yapsaydım, Tcl’ye hoş nesne yönelimli olanaklar eklemek kolay olurdu.
Şu anda nesne yönelimli olanaklar sağlayan birkaç Tcl uzantısı var, ancak Tcl’nin bir parçası olan tek bir “standart” yok; bu da diğer betik dillerine kıyasla bir zayıflıktır.
Tcl’nin geleceğini nerede görüyorsunuz?
Tcl artık 20 yaşından büyük (inanması zor!), yani oldukça olgun; Tcl veya Tk etrafında sarsıcı yeni gelişmeler görmeyi beklemiyorum. Tcl ve Tk’nin çeşitli uygulamalar için kullanılmaya devam edeceğinden eminim.