Deli İcadı Sanal Makinalar
Başlıkta her ne kadar “makinalar” desem de, aslında bahsedeceğim iki adet sanal makina var: JVM (Java Virtual Machine) ve CLR (Common Language Runtime). Bu iki ortamdan en az birisi için kod yazmış olduğunuzu tahmin ediyorum. (Öyle değilseniz ve sanal makinalar hakkında bir fikriniz yoksa endişelenmeye başlasanız iyi olur
) Java programlama dili JVM için, C# ise CLR için ipi göğüsleyen diller gördüğüm kadarıyla. Fakat sanal makinalar için bildiğiniz gibi yüksek seviyeli dillerin hiçbir önemi yok, çünkü yazılan her kod parçası CLR için IL’e (Intermediate Language), JVM için Java bytecode’a dönüştürülüyor ve sonrasında JVM ve CLR bu ara dilleri bulundukları işletim sistemi için çalıştırıyorlar.
Aramızda Java veya C# dilini kullanmak istemeyen ama bu iki sanal makinanın bize sunduğu bir çok nimetten (hafıza yönetimi vb.) faydalanmak isteyen bünyeler olabilir. İşte onlar için bu ortamları hedef alan birçok dil kullanılmayı beklemektedir. Aşağıda bu ortamları hedef alan örnek birkaç dili görebiliriz:
| Dil | Hedef |
| Clojure | JVM |
| Groovy | JVM |
| Scala | JVM |
| JRuby | JVM |
| Jython | JVM |
| COBOL.Net | CLR |
| IronRuby | CLR |
| IronPython | CLR |
| Boo | CLR |
| F# | CLR |
Bildiğiniz gibi bu diller için sınırlı değiliz ve istersek kendi dilimizi dahi yazıp istediğimiz ortamı hedef alabiliriz. Tek yapmamız gereken kendi dilimizden sanal makinanın anladığı dile (IL veya Java bytecode gibi) dönüştüren bir derleyici yazmak. Geri kalan herşeyi bizim için sanal makina halledecektir.
Özellikle JVM için yazılan diller çok iyi bir kullanıcı kitlesine sahip oldular diyebilirim. CLR içinse kazan daha yeni kaynamaya başlıyor. (Ah şu javacılar hep bir adım öndeler
). Bu gelişmeler olurken bazı fırıldak arkadaşlar boş durmamışlar ve Noop gibi güzel bir proje ortaya çıkarmışlar. Noop, JVM’i hedef alan, mevcut dillerin kötü özelliklerini barındırmayan (vay bee) fakat keşke kullandığım dil içerisinde yeralsa dediğimiz özellikleri barındıran bir programlama dili. Arkasına şimdiden Google gibi bir dünya devini almış ayrıca.
Noop, kodun daha okunabilir ve test edilebilir olmasını amaçlamasının yanında, subclassing ve static değişkenler gibi yanlış kullanımı felaketle sonuçlanabilecek özellikleri barındırmayarak daha düz bir kullanım sağlamayı amaçlıyor. Ayrıca dökümantasyon olayını çözmeyi kendilerine hedef edinmişler ve Dependency Injection‘ı dilin bir özelliği haline getirmeyi de vadediyor bu akıllı çocuklar. Şuan Noop için indirilebilir bir sürüm yok, geliştirme aşamasında emekliyor diyebiliriz. Ama çıktığı ilk gün bolca bahsi geçeceğinden eminim. Şahsen söylenenler çok hoşuma gitti, gerçeği zaman gösterecek. Meraklı arkadaşlar buraya göz atabilirler.
Sanal makinalar işin hamallık gerektiren kısımlarını o narin omuzlarına almışlar, sürekli geliştiriliyorlar ve test ediliyorlar. Bize ise sadece yüksek seviyeli düşünüp dilimizin gramerini çıkarmak ve bir de derleyicisini yazmak kalıyor
Not: Noop için Java dönüştürücüsü, bir yorumlayıcı ve Java bytecode’a dönüştürecek bir derleyici sunacaklarmış. Üç farklı yoldan tadını çıkarabileceğiz demek ki.
