← A–Z Röportajları

Groovy

Groovy’nin Proje Yöneticisi Guillaume Laforge, dilin arkasındaki geliştirme hikâyesini ve neden dünya çapındaki işletmelere doğru akıcı bir şekilde ilerlediğini düşündüğünü anlatıyor. Groovy’nin, geliştiriciler için hayatı kolaylaştıran bir yapıştırıcı olduğunu söylüyor – ve bunun Jazz ile hiçbir ilgisi yok.

Groovy adını nasıl buldunuz? Karşı kültüre bir gönderme mi yoksa bir caz hayranı mısınız?

Adın ortaya çıkışıyla ilgili az bilinen küçük bir hikâye var!

2003’te, Java ile boğuşup Ruby, Python ve Smalltalk gibi dinamik dillerdeki özellikleri severken, şu türden pek çok soru ortaya çıktı: “Java’da şu ya da bu özellik olsaydı ve söz konusu özelliği closure’lar, özellikler, metaprogramlama yetenekleri, gevşetilmiş Java sözdizimi ile değiştirebilseydiniz ne kadar ‘groovy’ olurdu?” ve daha fazlası.

İsim seçimine gelince, tüm bu harika özelliklere sahip yeni bir dilin ‘Groovy’ olarak adlandırılması gerektiği açıktı! Dolayısıyla bu, karşı kültüre bir gönderme de değil, cazla ilgili de değil; yalnızca Java’ya yeterince yakın ama daha güçlü ve daha ifade edici bir dile sahip olma hayaliyle ilgili. Groovy bu şekilde hayata geçti.

Groovy ile Ruby, Python ve Perl gibi diğer tanınmış dinamik diller arasındaki temel farklar nelerdir?

Temel ayırt edici unsur, alttaki Java platformu ile kusursuz entegrasyondur. Bu, JVM (Java Sanal Makinesi) için alternatif diller de dâhil olmak üzere, başka hiçbir dilin sunmadığı bir şeydir; en azından Groovy’nin sunduğu düzeyde değildir.

Öncelikle, dilin grameri Java 5 gramerinden türetilmiştir; dolayısıyla herhangi bir Java geliştiricisi, temel sözdizimi zaten ezbere bildiği bir şey olduğu için, bir anlamda aynı zamanda bir Groovy geliştiricisidir. Ancak elbette Groovy, Java gramerinin ötesinde çeşitli sözdizimsel şeker öğeleri sunar. Bu yakın ilişkinin güzel tarafı, bir Java geliştiricisi için öğrenme eğrisinin gerçekten çok düşük olmasıdır.

API’ler düzeyinde bile, nesne yönelimi ve güvenlik modeli gibi unsurlar Java’ya alışık olduğunuz şekliyle aynıdır. Groovy ile Java arasında gerçekten hiçbir uyumsuzluk yoktur. Bu yüzden pek çok proje Groovy’yi entegre eder ya da şirketler Grails web çatısını benimser.

Groovy’yi geliştirmenize ne yol açtı – başka bir dilde çözemediğiniz belirli bir sorunu çözmek ya da belirli bir işlevi yerine getirmek için miydi?

2003 yılında, inşa etmek istediğiniz uygulamanın bir meta-modelini tanımlamak için bir Swing tasarımcı kullanıcı arayüzünün (UI) bulunduğu, bir tür uygulama üreticisi olan bir proje üzerinde çalışıyordum; burada tabloları, sütunları ve veriyi ve yerleşimi temsil edecek UI bileşenlerini tanımlayabiliyordunuz.

Bu meta-model, canlı olarak çalışan bir uygulamayı oluşturmak üzere modeli yorumlayan bir web uygulamasına dağıtılıyordu. Oldukça güçlü bir sistemdi.

Proje ayrıca, otomatik tamamlama alanları gibi belirli alanları göstermek için bazı özelleştirilmiş UI bileşenlerine izin veriyordu ve kendi bileşenlerinizi geliştirebiliyordunuz. Ancak bu bileşenlerin Java’da geliştirilmesi, bayt koda derlenmesi, bir JAR dosyası içinde arşivlenmesi ve – hepsinden önemlisi en büyük dezavantaj olarak – bu yeni bileşeni dikkate alması için web uygulamasının yeni bir sürümünün dağıtılması gerekiyordu.

Açık sorun şuydu: bu üretilmiş uygulamaları kullanan tüm müşteriler, yalnızca ihtiyaç duyduğu yeni bileşene bir müşterinin erişebilmesi için, bir bakım penceresi boyunca uygulamaları kullanmayı durdurmak zorundaydı. İşte tam bu noktada, bu bileşenleri geliştirmek için bir tür betik dilinin yararlı olacağına ve bunların uygulamaların meta-modelinde saklanıp çalışan sunucuda canlı olarak yorumlanabileceğine karar verdim.

Dil için birincil tasarım hedefi neydi?

Groovy’nin tasarım hedefi her zaman geliştiricilerin hayatını kolaylaştırmak olmuştur.

Groovy’yi daha güçlü kılmak için diğer dillerden ilginç özellikler aldık, ancak Java ile tamamen kusursuz bir entegrasyona her zaman güçlü bir şekilde odaklandık. Bu hedefler nedeniyle Groovy, çeşitli uygulama bileşenlerini birbirine bağlamak, kablolamak ya da yapılandırmak için sıklıkla bir süper yapıştırıcı olarak kullanılır. Dili tasarladığımızda, bu yapıştırıcı yönü açıkça birincil işlevlerden biriydi.

En sık nasıl kullanılıyor?

Groovy kullanan şirketler genellikle Groovy’de tam uygulamalar yazmaz; bunun yerine Groovy ve Java’yı birlikte kullanır. Bu nedenle Groovy, uygulamaların parçalarını birbirine bağlamak için bir yapıştırıcı dil olarak, eklentiler ya da genişletme noktaları için bir dil olarak, birim ve fonksiyonel testleri daha ifade gücü yüksek bir şekilde yazmak için ya da bir iş dili olarak sıkça kullanılır. Alan-Özgü Bir Dil biçiminde iş kurallarını tanımlamak için son derece uygundur.

Groovy ne kadar yaygın kullanılıyor ve nerelerde?

Groovy, insanların uygulamalarına ek bir dili entegre edip kullanmaları gerektiğinde çok sık tercih edilen bir dildir ve Groovy’ye dayanan pek çok görev açısından kritik uygulama olduğunu biliyoruz.

Örneğin Groovy, iş kurallarını yazmadaki ifade gücü ve okunabilirliği nedeniyle finansal uygulamalarda sıklıkla kullanılır; ayrıca varsayılan olarak BigDecimal aritmetiğini kullanması sayesinde, büyük para miktarları üzerinde önemli yuvarlama hataları olmadan kesin hesaplamalar yapılmasına olanak tanır.

Örneğin ABD’de büyük bir sigorta şirketi, tüm sigorta poliçesi risk hesaplama motorunu yazmak için Groovy’yi kullandı. Ayrıca Avrupa’daki tüm bankaların yüzde 10’u ile çalışan, her ay bir milyar Avro tutarında krediyle ilgilenen bir Avrupa kredi verme platformu da, kredi tahsisine ilişkin iş kuralları ve web servisleriyle çalışmak için bir yapıştırıcı olarak Groovy’yi kullanıyor.

Finans sektörü tek başına değil: Groovy ayrıca biyomedikal ve genetik araştırmacılar tarafından, CAD yazılımlarında ve daha birçok alanda kullanılıyor.

Groovy üzerinde kaç geliştirici çalışıyor?

Şu anda Groovy üzerinde tam zamanlı çalışan iki kişi var, ayrıca son derece aktif birkaç commit yetkilisi bulunuyor. Projenin belirli alanlarına odaklanan, daha seyrek katkı yapan ikinci bir katmanımız da var. Groovy, geliştirilmesi boyunca uzun bir commit yetkilileri ve katkıda bulunanlar listesi görmüş, çok aktif bir projedir.

Grails (eski adıyla Groovy on Rails) hakkında biraz daha bilgi verebilir misiniz ve sizce Groovy ile neler yapılabileceğine iyi bir örnek mi?

Grails son derece üretken bir web geliştirme yığınıdır. Basit bir web çatısından daha fazlası olarak, Spring ve Hibernate gibi alanında en iyi açık kaynak yazılım bileşenlerinin gelişmiş bir entegrasyonunu sunar; bunu yaparken geliştiriciler için çok iyi bir deneyim sağlarken proje derlemesi, kalıcılık, zengin bir görünüm katmanı ve genişletilebilir bir eklenti sistemi gibi çeşitli diğer unsurları da ele alır.

Açıkça görülüyor ki Grails, projenin her aşamasında geliştiricilere verimlilik artışı sağlamak için Groovy’den yoğun biçimde yararlanır. Grails’in Groovy’yi ve kullandığı diğer tüm bileşenleri seçmesi, onu yüksek trafikli ve karmaşık uygulamalar için son derece çekici bir platform haline getirir.

Groovy kullanan diğer ilginç açık kaynak uygulamalar nelerdir?

Griffon, Grails temelleri üzerine kuruludur ve Groovy’nin kendi Swing builder sistemini genişleterek Swing ile karmaşık ve zengin masaüstü uygulamaları geliştirmenize olanak tanır. Griffon, Swing geliştirme için, Grails’in web geliştirme için olduğu şeydir.

Test alanında Easyb, davranış güdümlü geliştirme testleri için geliştiricilere bir DSL sunar ve Spock, birim testlerine bazı gelişmiş test ve mocklama teknikleri getirir. Ayrıca çok güzel ve gelişmiş bir derleme sistemi olan Gradle’dan da bahsetmek isterim.

Dilin geliştirilmesi kapsamında şu anda üzerinde çalıştığınız en büyük görevler nelerdir?

Her zaman aynı anda iki süregelen çabamız var: mevcut kararlı dalı sürdürmek ve geliştirmek ile geliştirme dalında çalışmak ve yenilik yapmak.

Örneğin, bazı hataları gideren ve küçük iyileştirmeler içeren Groovy 1.6’nın küçük bir sürümünü yeni yayımladık; ayrıca pek çok yeni özellikle dolu olan yaklaşan Groovy 1.7’nin bir önizlemesini de yayımladık. Groovy 1.7, derleme zamanı metaprogramlama yetenekleri aracılığıyla dili genişletmeyi kolaylaştıracak. Ayrıca birim testleri için daha iyi doğrulama mesajları, programlarınızda daha fazla yerde ek açıklamaları kullanabilme yeteneği ve çok daha fazlasını sunacak.

Diğer özgür ve/veya açık lisanslar yerine neden Apache Lisansı’nı seçtiniz?

Apache Lisansı’nın, herkesin dili kendi ihtiyaçlarına uygun şekilde gömme, yeniden kullanma ya da hatta çatallama ve kendi uygulamalarına entegre etme konusunda özgür olduğu, harika ve açık bir lisans olduğunu düşündük. Seçim, özgün commit yetkililerinden bazılarının Apache Software Foundation’dan gelmesi nedeniyle de kolay oldu.

Bazı yönleriyle Java’nın bir üst kümesi olduğundan, Java geliştiricilerinin öğrenmesi kolaydır; peki Java geçmişi olmayan geliştiriciler için öğrenme eğrisi nasıldır?

Elbette Groovy, Java geliştiricileri için öğrenmesi kolaydır; ancak betik yönleri sayesinde, farklı bir geçmişten gelen kullanıcılar için de öğrenmesi oldukça rahattır.

C benzeri bir sözdizimine sahip bir dile az çok aşinaysanız, kavramak kolaydır. Elbette her dil ve platformda olduğu gibi öğrenilmesi gereken bazı API’ler vardır, ancak bunları ihtiyaç duydukça, baştan büyük bir öğrenme maliyeti olmadan öğrenebilirsiniz. Dolayısıyla Java geçmişi olmasa bile öğrenme eğrisi çok dik değildir.

En sevdiğiniz Groovy özelliği nedir?

Bu zor bir soru! Dilde sevdiğim gerçekten pek çok yön var!

Sanırım sadece bir tane seçmem gerekseydi, bu Groovy’nin closure desteği olurdu. Closure’lar ile günlük sorunlarınızı nasıl çözdüğünüz ya da karmaşık algoritmaları nasıl ele aldığınız konusunda farklı düşünmeye başlayabilirsiniz. Closure’lar, kodu ve davranışı, hatta veriyi (Groovy builder’lar sayesinde) kapsüllemek için size ek bir soyutlama katmanı sağlar. Ayrıca Java koleksiyonlarına eklenen çeşitli yardımcı metotlarla birlikte, closure’lar sayesinde fonksiyonel dillerin gücü elinizin altındadır.

Groovy’yi geliştirirken karşılaştığınız en büyük zorluk neydi ve bunun etrafından nasıl dolaştınız?

İki ana zorluğun, Java ile tamamen kusursuz birlikte çalışabilirlik ve entegrasyon ile performans olduğunu söyleyebilirim.

Birincisi her zaman tasarım hedeflerimizin bir parçasıydı; bu nedenle tüm hatalarla ilgilenmek ve Java’nın kendi hızına ayak uydurmak için her zaman elimizden geleni yaptık (örneğin Java 5 ek açıklamaları, enum’ları ve jenerikleri tanıttığında).

İkincisi için ise Groovy’nin mevcut en hızlı dinamik dil olmasını sağladık (JVM içinde ve dışında). Çağrı noktası önbellekleri gibi çeşitli teknikler kullandık. Ayrıca, yakında Java Sanal Makinesi’ne gelecek olan JSR-292 invokedynamic bayt kodu talimatları konusunda çok heyecanlı ve iyimseriz; bunların çok önemli performans artışları getirmesi bekleniyor.

Kurumsal ortamlardaki geliştiriciler, Groovy gibi standartlaştırılmamış ve nispeten yeni dilleri iş yerinde kullanmakta zorlanıyor mu?

Duruma bağlıdır, ancak bazı durumlarda bu yaşanabilir. Groovy’yi satmak kolaydır; sonuçta classpath’e eklenen bir başka kütüphaneden ibarettir. Ancak bazı durumlarda daha sorunlu olabilir, çünkü bazı şirketler gerçekten çok katıdır ve projelerine başka herhangi bir bağımlılık eklemekten kaçınır; ek riski azaltmaya çalışırlar. Yine de genellikle Groovy’nin getirdiği çeşitli avantajlar, daha muhafazakâr organizasyonlara bile onu kabul ettirmeye yardımcı olur.

Yakın zamana kadar araç desteği de ideal değildi; ancak JetBrains, IntelliJ IDEA’daki inanılmaz Groovy ve Grails desteğiyle yolu açtı. NetBeans’te de harika bir desteğimiz var ve SpringSource Eclipse ekibi sayesinde, Groovy için Eclipse eklentisi rakiplerine giderek yetişecek. Groovy artık birkaç yıl öncesine kıyasla çok daha kolay kabul görüyor ve pek çok şirket ileri düzey ihtiyaçları için Groovy’ye güveniyor.

Bir Slashdot okuyucusu aylar önceki bir gönderide Groovy’nin kurumsal kitleyi dönüştürmeye hazır olduğunu söylemişti. Bu görüşe katılıyor musunuz?

Giderek daha fazla şirket işlerini yürütmek için Groovy’ye güveniyor – büyük miktarlarda parayla ilgilenen kritik uygulamalar da dahil. Dolayısıyla Groovy artık bu tür şirketler ve işletmeler için kilit bir varlık. Ayrıca Groovy’nin öğrenmesinin ve kullanmasının çok kolay olması ve Java ile son derece iyi entegre olması, uygulamalara daha fazla çeviklik ve güç kazandırmak için onu çok uygun bir seçenek haline getiriyor.

Groovy’nin gelecekte nereye gittiğini görüyorsunuz?

Bu gerçekten çok iyi bir soru! Her büyük sürümden sonra, dile yeni, yenilikçi ve faydalı özellikler ekleyip ekleyemeyeceğimizi sorguluyoruz. Ve sonunda her zaman bir şeyler buluyoruz!

Daha önce de belirttiğim gibi, derleme zamanı metaprogramlama tekniklerimiz ve genişletilmiş ek açıklama desteğimiz gibi yenilik yapmaya devam ettiğimiz alanlar var. Ayrıca diğer dillerde ve bunların ilgili API’lerinde ilginç bulduğumuz bazı özellikleri de değerlendiriyoruz; örneğin Erlang’ın aktör eşzamanlılık modeli, OCaml gibi fonksiyonel dillerdeki desen eşleştirme ya da Haskell’daki parser birleştiricileri. Kullanıcılarımıza gerçek değer ve fayda getiren yeni özellikler bulmaya her zaman çalışıyoruz.