Lua’nın tasarımı ve geliştirilmesi hakkında Prof. Roberto Ierusalimschy ile sohbet ediyoruz.
Prof. Ierusalimschy, şu anda Rio de Janeiro Papalık Katolik Üniversitesi’nin Enformatik Bölümü’nde Doçent olarak görev yapmaktadır; burada programlama dilleri üzerine, özellikle betikleme ve alan-özgül diller üzerine araştırmalar yürütmektedir. Prof. Ierusalimschy, şu anda Brezilya Araştırma ve Teknoloji Geliştirme Konseyi tarafından bağımsız araştırmacı olarak desteklenmekte ve Lua.NET’in geliştirilmesi için Microsoft Research’ten bir hibe almaktadır. Ayrıca Lua için kütüphanelerin geliştirilmesi amacıyla FINEP’ten de bir hibesi bulunmaktadır.
Lua’nın geliştirilmesini ne tetikledi? Çözmeye çalıştığınız belirli bir sorun var mıydı?
Programlama Dilleri Tarihi Üçüncü ACM Konferansı için yazdığımız makalede, Lua’nın kökenlerine dair tüm hikâyeyi anlatıyoruz.
Uzun lafın kısası, evet, belirli bir sorunu çözmek için Lua’yı geliştirdik. Lua’yı bir akademik kurumda geliştirmiş olmamıza rağmen, Lua hiçbir zaman “akademik bir dil” olmadı; yani hakkında makale yazmak için tasarlanmış bir dil değildi. Kullanımı kolay bir yapılandırma diline ihtiyacımız vardı ve o dönemde (1993) mevcut olan tek yapılandırma dili Tcl idi. Kullanıcılarımız Tcl’yi kullanımı kolay bir dil olarak görmüyordu. Bu yüzden kendi yapılandırma dilimizi oluşturduk.
Lua adı nasıl ortaya çıktı?
Lua’dan önce SOL adını verdiğim bir dil geliştirmiştim; bu ad ‘Simple Object Language’ (Basit Nesne Dili) anlamına geliyordu ama Portekizce’de ‘güneş’ demektir. Bu dilin yerini Lua aldı (o zamanlar hâlâ isimsizdi). Lua’yı Sol’dan ‘daha küçük’ olarak algıladığımız için, bir arkadaşım Portekizce’de ‘ay’ anlamına gelen bu adı önerdi.
Dilin geliştirilmesi sırasında aşmanız gereken özellikle zor problemler var mıydı?
Hayır. İlk uygulama gerçekten çok basitti ve eldeki problemleri çözdü. O zamandan beri zor/rahatsız edici problemlerden kaçınma lüksüne sahip olduk. Yani, yol boyunca birçok problem oldu, ancak bunların hiçbirini aşmak zorunda kalmadık; her zaman bir çözümü erteleme seçeneğimiz vardı.
Bunlardan bazıları çözülmeden önce birkaç yıl bekledi. Örneğin, 1995’te yayımlanan Lua 2.2’den beri Lua’da sözcüksel kapsam (lexical scoping) istiyorduk, ancak bunu Lua’nın kısıtları içinde verimli biçimde nasıl uygulayacağımızı bilmiyorduk. Kimse bilmiyordu. Sorunu ancak 2003’te yayımlanan Lua 5.0 ile, yeni bir algoritma sayesinde çözdük.
Lua ile yazılmış gördüğünüz en ilginç program hangisiydi ve neden?
Lua ile birçok farklı şekilde yazılmış pek çok ilginç program gördüm. Bir tanesini seçmek haksızlık olur. Bir kategori olarak özellikle tablo güdümlü programları seviyorum; yani ele alınan özel problemden daha genel olan ve bu özel problem için tablolar aracılığıyla yapılandırılan programlar.
Dili başlangıçta amaçlanmayan bir şekilde kullanıldığını hiç gördünüz mü? Öyleyse neydi ve işe yaradı mı?
Benim için Lua’nın en beklenmedik kullanımlarından biri, Lua betiklerini Perl kodunun içine gömmek için kullanılan bir Perl eklentisi olan inline::Lua’dır. Bir betik dilini betiklemek için Lua kullanmanın tuhaf bir şey olduğunu hep düşündüm. Çalışıyor, ancak gerçekten ne kadar faydalı olduğunu bilmiyorum.
Daha geniş anlamda, Lua’nın oyunlarda kullanılması bizim için tamamen beklenmedikti. Lua’yı oyunlar için geliştirmedik ve bu olasılığı daha önce hiç düşünmemiştik. Elbette, geriye dönüp bakınca bunun bariz bir uygulama alanı olduğu görülüyor ve bu topluluğun bir parçası olmaktan çok mutluyuz. Ve işe yarıyor gibi görünüyor ;)
Lua’nın oyunlarda kullanımından zaten bahsettiniz ve World of Warcraft (WoW) gibi çok ünlü bazı oyunlarda betikleme için kullanılıyor. WoW oynadınız mı ya da içinde betikler yazdınız mı?
Hayır :) Bu tür oyunları (RPG) hiç oynamadım. Aslında, yakın zamana kadar WoW eklentileri (betik dedikleri şeyler) hakkında hiçbir bilgim yoktu.
Son Lua Workshop’ta Jim Whitehead, WoW eklentileri hakkında güzel bir konuşma yaptı; şu anda bildiklerimin azıcığını ancak o zaman öğrendim.
Sizce Lua’nın bilgisayar oyunlarında kullanılması, aksi takdirde dili keşfetmeyecek kişilerin dili tanımasını sağladı mı?
Elbette.
Sanırım insanlar Lua’yı başka herhangi bir kanaldan ziyade oyunlar aracılığıyla öğrendi.
Sizce bilgisayar oyunlarının programlama dillerini teşvik etmede bir rolü var mı?
Kesinlikle oyunlar, insanları programlamayla tanıştırmanın önemli bir yoludur. Birçok çocuk bilgisayar kullanmaya oyun oynayarak başlar; bu yüzden aynı uyarıcıyı bilgisayarların daha ileri kullanımları ve programlama için kullanmak doğal görünüyor. Ancak, insanları programlama öğrenmeye teşvik etmek için her zaman başka yolları da düşünmeliyiz. Herkes oyunlarla ilgilenmez. Özellikle kızlar, erkeklere kıyasla oyunlar (ya da en azından çoğu oyun) tarafından çok daha az motive edilir.
Adobe Lightroom’un yüzde 40’tan fazlasının Lua ile yazıldığına inanılıyor. Bu konuda ne hissediyorsunuz?
Gururlu :)
Sizce Lua neden Adobe Lightroom gibi programlar ve çeşitli bilgisayar oyunları için bu kadar popüler bir araç seti oldu?
Adobe Lightroom ile genel olarak oyunlar arasında önemli bir fark var. Çoğu oyun için Lua’yı seçmenin temel nedeni, betiklemeye verdiği önemdir. Lightroom ise Lua’yı farklı bir şekilde kullandı; programın büyük bir kısmı Lua ile yazıldı. Adobe için Lua’yı seçmenin güçlü bir nedeni sadeliğiydi. Ancak her durumda, C/C++ ile arayüz oluşturmanın kolaylığı da oldukça önemlidir.
Wikipedia’daki Lua makalesinde şu not yer alıyor: ‘Lua’nın geliştiricileri, tek ve her yerde bulunan veri yapısı mekanizmalarıyla Lisp ve Scheme’in, Lua’nın birincil veri yapısı olarak tablonun geliştirilmesi kararında büyük bir etki olduğunu da belirtir.’ Bu doğru mu ve liste neden bu kadar güçlü bir etkiydi?
Scheme bizim için büyük bir ilham kaynağı olmuştur. Bu, geliştirmeyi çok isteyeceğim bir dildir. Ve yalnızca listeleri kullanarak neler yapabildiğimiz gerçekten şaşırtıcıdır. Ancak listeler, ana paradigması buyurgan (imperative) olan Lua gibi bir dil için pek uygun görünmüyor. İlişkisel diziler (associative arrays) oldukça esnek bir mekanizma olduğunu kanıtladı.
Sizce MIT lisansı, dilin popülerliğinin artmasına olanak sağladı mı?
Elbette. Lua’yı PUC dışına ilk kez yayımladığımız yıl, daha kısıtlayıcı bir lisans benimsedik. Temelde akademik kullanım için ücretsizdi ama ticari kullanım için değildi. Daha liberal bir lisansa geçtikten sonra Lua yayılmaya başladı. Sanırım GPL benzeri bir lisans bile yayılmasını olumsuz etkilerdi. Çoğu oyun şirketi teknolojileri konusunda çok ketumdur. Bazen Lua’yı gerçekte kimin kullandığını bilmek zor oluyor!
Sizce Lua’nın belirgin kusurları var mı?
Herhangi bir açık kusuru işaret etmemiz zor; aksi halde onu düzeltirdik. Ancak, diğer tüm dillerde olduğu gibi, Lua’nın tasarımı birçok uzlaşma içerir. Örneğin, birçok kişi sözdiziminin çok ayrıntılı olduğundan şikâyet eder, ancak bu sözdizimi programcı olmayanlar (örneğin oyuncular) için daha dostçadır. Dolayısıyla, bazı insanlar için sözdizimi kusurludur, bazıları için değildir. Benzer şekilde, bazı programcılar için dinamik türleme bile bir kusurdur.
5.1.3, Lua’nın önceki sürümlerinden nasıl farklıdır ya da farklı olacaktır?
Lua’da 5.1.x sürümleri yalnızca hata düzeltme sürümleridir. Dolayısıyla 5.1.3, 5.1.2’de bulunan birkaç hatanın düzeltilmesi dışında 5.1’den farklı değildir. Bir sonraki ‘gerçek’ sürüm olan 5.2, ufukta hâlâ biraz uzaktadır. Lua, 5. sürüme kadar bir miktar hızlı evrim geçirdi (bazı kullanıcılar çok hızlı derdi); bu nedenle şimdi kültürünün istikrar kazanması için biraz zaman tanımak istiyoruz. Sonuçta, her yeni sürüm mevcut kitapları, ek dokümantasyonu ve benzerlerini otomatik olarak eski hale getirir. Bu yüzden, yakın gelecekte dil için büyük değişiklikler planlamıyoruz.
Dilin kurumsal sponsorluğu, Lua’nın gelişimini herhangi bir şekilde etkiledi mi?
Kurumsal sponsorluk programı hâlâ çok yeni; Haziran 2008’de başladı.
Ancak Lua’nın geliştirilmesi üzerinde hiçbir etkisi yoktur. Program, sponsora yalnızca görünürlük sunar. Sponsorların dil hakkında isteklerini iletebilecekleri özel bir kanalı yoktur ve önerilerini kabul etmek konusunda kendimizi hiçbir şekilde yükümlü hissetmiyoruz.
Açık kaynağın büyümesinin Lua üzerindeki etkisi sizce ne oldu?
Muazzam bir etki! Lua’nın geliştirilmesi açık kaynak projelerinin tipik geliştirme yapısını izlemez; bunun dışında Lua, açık kaynak çağının tipik bir ürünüdür.
Güçlü bir topluluğumuz var ve bu topluluktan çok fazla geri bildirim alıyoruz. Lua açık kaynak olmasaydı ne popülerliğine ne de kalitesine ulaşabilirdi.
Sizce Lua neden daha büyük uygulamalar içinde bir betikleme arayüzü sağlamak için popüler bir seçim?
Tcl dışında, Lua bu özel amaç için ilk günden itibaren tasarlanmış tek dildir. Daha önce söylediğim gibi, herhangi bir dil tasarımı genellikle birçok uzlaşma içerir. Lua’nın uzlaşmaları betikleme, yani uygulamaları kontrol etme konusunda iyi olmaya yöneliktir. Diğer çoğu dilin uzlaşmaları ise daha kapsamlı kütüphanelere sahip olmak, işletim sistemiyle daha iyi bütünleşmek ya da daha katı bir nesne sistemi gibi farklı alanlara yöneliktir.
Lua’nın Snort gibi sistem yöneticisi araçlarında yaygın olarak kullanıldığı bir alan var. Sizce sistem yöneticilerinin bir dil üzerindeki etkisi nedir?
Bazı dillerde sistem yöneticilerinin büyük bir etkisi olabilir. Örneğin Perl, bu alandan çok güçlü bir etki aldı. Ancak Lua, sistem yöneticilerinden çok az etki gördü. Bunun nedeni, kullanım biçimleri ve hedeflerinin oldukça farklı olmasıdır.
Örneğin, Snort veya Wireshark gibi bir uygulamayı düşünün. Perl’in amacı, tüm uygulamayı Perl ile uygulamanıza olanak tanımaktır. Bunun için dil, bu araçların ihtiyaç duyabileceği tüm sistem ilkelini sağlamalıdır. Lua ise çok dilli geliştirmeyi vurgular. Uygulamaya özgü ilkeller Lua tarafından değil, uygulamanın kendisi tarafından sağlanır.
Ayrıca, sistem yöneticisi desteği sıklıkla taşınabilirlikle — Lua’daki temel bir hedefle — çatışır. Yine, bir sistem yöneticisi aracı, ne kadar kendine özgü olurlarsa olsunlar, sistemin tüm olanaklarına erişim sağlamalıdır. Lua, böyle bir erişimi sağlamak için bazı kütüphanelere sahiptir, ancak bunlar yerleşik değildir. Ve bu kütüphaneler bile sistem olanaklarını daha standart, daha az kendine özgü bir şekilde sunmaya çalışır.
Şu anda hangi dillerle çalışıyorsunuz?
Günümüzde en çok çalıştığım dil C’dir; hem Lua’nın uygulanmasında hem de bazı kütüphanelerde. Ayrıca metin işleme ve sistem otomasyonu gibi görevler için Lua’yı sıkça kullanıyorum. Geçmişte birçok farklı dille çalıştım: Fortran, Mumps, Snobol, Smalltalk, Scheme, Pascal ve C++ ile ciddi programlama yaptım; ayrıca çeşitli makineler için assembler’lar kullandım.
İçine Lua gömülmesinin gerçekten fayda sağlayacağını düşündüğünüz belirli bir araç var mı?
Gömülü bir betikleme yeteneğinden fayda görmeyecek bir araç düşünmek zor; bu destek için Lua bariz bir seçimdir.
Sizce Lua, bilgisayar geliştirme alanına nasıl bir kalıcı miras bıraktı?
Lua’dan herhangi bir ‘kalıcı’ mirastan söz etmek için bence çok erken. Ancak Lua’nın dil tasarımı üzerinde şimdiden bir miktar etkisi olduğunu düşünüyorum. Lua’da uygulandığı şekliyle ortak yordamlar (co-routines) kavramı bu alana bazı yenilikler getirdi. Ayrıca, yetkilendirmeye (delegation) dayanan Lua’nın benimsediği nesne modeli sıkça anılır. Uygulama tarafında ise Lua, kayıt tabanlı sanal makineler için büyük bir vitrin oldu.
Lua ayrıca ‘küçük güzeldir’ fikrinin de bir vitrinidir; yazılımın faydalı olmak için şişkin olmasına gerek yoktur.
Lua’nın geleceğini nerede görüyorsunuz?
Betikleme. ‘Betik dili’ teriminin ‘dinamik dil’ ile eşanlamlı hale gelmesi üzücü.
Bir betik dili, adından da anlaşılacağı gibi, esas olarak betikleme için kullanılan bir dildir. Terimin kökeni, diğer programları betiklemek için kullanılan kabuk dillerine dayanır. Tcl bunu bir programı betiklemek için genişletti, ancak daha sonra insanlar bu terimi Perl veya Python gibi, (orijinal anlamda) betik dili olmayan diller için kullanmaya başladı. Bunlar dinamik dillerdir. Gerçek betikleme için Lua baskın bir dil haline geliyor.
Dilin ilk geliştirilmesi ve devam eden kullanımı açısından en çok neyle gurur duyuyorsunuz?
Lua’nın geldiği noktaya bakıldığında bu kadar popülerlik elde etmiş olmasından çok gurur duyuyorum. Şimdiye kadar belirli bir popülerlik düzeyine ulaşmış tüm diller arasında, gelişmiş bir ülkede ortaya çıkmamış tek dil Lua’dır. Aslında, Lua ve Ruby dışında, sanırım bu dillerin hepsi ABD’de ya da Batı Avrupa’da geliştirilmiştir.
Önümüzdeki 5 ila 20 yıl içinde bilgisayar programlama dillerinin nereye gittiğini görüyorsunuz?
Önümüzdeki 20 yılı tahmin etmenin kolay yanı, yanlış olduğunun kanıtlanmasının uzun zaman alacak olmasıdır. Ama tersini deneyebiliriz: 20 yıl önce, 80’lerde neredeydik?
Beşinci Nesil projesini hatırlayacak kadar yaşlıyım. O zamanlar birçok kişi uzak gelecekte (ki bu günümüzdür) hepimizin Prolog ile programlama yapacağını iddia ediyordu :)
Kısa vadede Ada’nın çoğu alanda baskın dil olacağı düşünülüyordu. İlginç olan, programlama dillerindeki önemli değişimlerin tohumlarının o zamanlar zaten atılmış olmasıdır. Nesne yönelimli programlama yükselişteydi; OOPSLA 1986’da başlatıldı. Ancak o dönemde kimse C++’ın Ada’yı geride bırakacağına bahse girmezdi.
Dolayısıyla, önümüzdeki 20 yılın tohumlarının zaten ortada olduğunu söyleyebilirim; ancak bunlar muhtemelen insanların düşündüğü ya da beklediği şeyler değildir.
Yeni yetişen programcılar için herhangi bir tavsiyeniz var mı?
Lua öğrenin :)
Daha ciddi konuşursak, ‘elinizdeki tek araç çekiçse, her şeyi çivi gibi görürsünüz’ fikrine gerçekten katılıyorum. Bu yüzden programcılar birkaç dili öğrenmeli ve her birinin güçlü yanlarını etkili biçimde kullanmayı öğrenmelidir. Diller arasındaki farklara saygı duymuyorsanız, birkaç dil öğrenmenin bir faydası yoktur.