Birisi Scala, Groovy ve Clojure arasındaki büyük farklılıkları açıklayabilir mi? Bu derlemelerin her birinin JVM üzerinde çalışacağını biliyorum ama aralarında basit bir karşılaştırma yapmak istiyorum.
Birisi Scala, Groovy ve Clojure arasındaki büyük farklılıkları açıklayabilir mi? Bu derlemelerin her birinin JVM üzerinde çalışacağını biliyorum ama aralarında basit bir karşılaştırma yapmak istiyorum.
Yanıtlar:
Groovy , sözdizimi Java'ya çok yakın olan, daha hafif kod ve daha az kaynak plakasına izin veren bir dizi sözdizimi geliştirmesiyle dinamik olarak yazılan bir dildir. Yeni bir sözdizimi öğrenmek zorunda kalmadan (Java'yı bildiğiniz varsayılarak) hızlı prototipleme, komut dosyaları ve dinamik dilleri öğrenmeyi kolaylaştıran bir yorumlayıcı aracılığıyla derlenebilir. Groovy 2.0'dan itibaren statik derleme için büyüyen desteğe de sahiptir . Groovy, geleneksel fonksiyonel programlamanın geleneksel tanımından oldukça uzak olmasına rağmen, kapakları destekliyor ve biraz işlevsel bir tarzda programlama desteğine sahip.
Clojure , Lisp'in Yazılım İşlem Belleği gibi birkaç gelişmiş özelliğe sahip bir lehçesidir . Lisp'i seviyorsanız ve JVM altında böyle bir şey kullanmak istiyorsanız, Clojure tam size göre. Muhtemelen JVM'de çalışan en işlevsel dil ve kesinlikle en ünlü dil . Ayrıca, diğer Lisp lehçelerinden daha değişmezliğe daha güçlü bir vurgu yapar , bu da onu fonksiyonel dil meraklılarının kalbine yaklaştırır.
Scala , tamamen nesne yönelimli bir dildir, Java'dan daha çok, araştırma dışı dillerde mevcut en gelişmiş tür sistemlerinden biri ve kesinlikle JVM'deki en gelişmiş tür sistemidir. Ayrıca, nesne yönünden ödün vermeden fonksiyonel dillerin birçok kavramını ve özelliğini birleştirir, ancak işlevsel dil özelliklerinden ödün vermek, bu dilin bazı meraklılarını erteler.
Groovy, Grails'te iyi bir kabul ve popüler bir web çerçevesine sahiptir. Ayrıca Maven'e popüler bir alternatif haline gelen Gradle inşa sistemine de güç veriyor. Kişisel olarak, özellikle Jython ve JRuby'nin diğerlerine kıyasla JVM ülkesinde yollara girmeye başlamasıyla sınırlı faydaya sahip bir dil olduğunu düşünüyorum.
Clojure, bazı çok ilginç özellikleri bile azaltsa bile, sadece JVM'de bir Lisp lehçesi olarak güçlü bir çekiciliğe sahiptir. Bu popülerliğini sınırlayabilir, ancak uzun bir süre onun sadık topluluğuna sahip olmasını bekliyorum.
Scala, Java ile doğrudan rekabet edebilir ve hemen hemen tüm yönleriyle parası için koşabilir. Şu anda popülerlikle rekabet edemez elbette ve güçlü bir kurumsal desteğin olmaması, kurumsal ortamlarda kabul edilmesini engelleyebilir. Ayrıca dilin nasıl geliştiği anlamında Java'dan çok daha dinamik bir dildir. Dil açısından bakıldığında, bu iyi bir şey. Binlerce kod satırı yazmayı planlayan kullanıcılar açısından, öyle değil.
Son bir açıklama olarak, Scala'ya çok aşinayım ve sadece diğer ikisini tanıyorum.
Scala, Huni olarak bilinen saf bir işlevsel dilden evrimleşti ve hemen hemen tüm Java'nın sözdiziminin temiz oda uygulamasını temsil ediyor, sadece net bir iyileştirmenin yapılabileceği yer veya dilin işlevsel doğasını tehlikeye atacağı yerde farklılık gösteriyor. Bu farklılıklar arasında statik yöntemler yerine tektonlu nesneler ve tür çıkarımı bulunur.
Bunların çoğu Martin Odersky'nin Pizza diliyle önceki çalışmalarına dayanıyordu . OO / FP entegrasyonu sadece kapanışların çok ötesine geçiyor ve dilin post-fonksiyonel olarak tanımlanmasına yol açtı.
Buna rağmen, birçok yönden Java'ya en yakın olanıdır. Temel olarak OO desteği ve statik yazmanın bir kombinasyonu nedeniyle, aynı zamanda dil tasarımındaki açık bir amaç nedeniyle Java ile çok sıkı bir şekilde entegre olması gerekir.
Groovy, Java'nın en büyük eleştirilerinden ikisini açıkça ele alıyor:
Belki de Java'ya sözdizimsel olarak en yakın olan, Clojure ve Scala'nın sağladığı daha zengin fonksiyonel yapıların bazılarını sunmuyor, ancak yine de özellikle script-syle programları yazmak için kesin bir evrimsel gelişme sunuyor.
Groovy, çoğunlukla yay kaynağı aracılığıyla üç dilin en güçlü ticari desteğine sahiptir.
Clojure, LISP ailesinde işlevsel bir dildir, aynı zamanda dinamik olarak yazılmıştır.
STM desteği gibi özellikler ona en iyi kullanıma hazır eşzamanlılık desteğini verirken, Scala bunu çoğaltmak için Akka gibi bir üçüncü taraf kütüphaneye ihtiyaç duyuyor .
Sözdizimsel olarak, aynı zamanda tipik Java kodundan üç dilden en uzunu.
Ayrıca en çok Scala ile tanıştığımı da açıklamalıyım :)
Clojure ile oynamak için hiç zamanım olmadı. Ama scala vs groovy için, bu James Strachan'ın kelimeleri - Groovy yaratıcısı
"Her ne kadar benim önerim javac'ın uzun vadeli değişimi için olsa da Scala. Çok etkilendim! Birisi bana Martin Odersky, Lex Spoon & Bill Venners tarafından 2003 yılında geri dönerek Scala'da Programlama kitabını göstermişse söyleyebilirim. Muhtemelen Groovy'i hiç yaratmamıştım. "
Bütün hikayeyi okuyabilir burada
Nereden geldikleri veya esas olarak hangi geliştiricileri hedefledikleri ile ayırt edilebilirler.
Groovy , Java'nın komut dosyası sürümü gibidir. Büyük mimariler tarafından desteklenen çevik uygulamalar geliştirirken uzun zamandır Java programcıları kendilerini evlerinde hissederler. Grails on Groovy, adın Rails çerçevesine benzer şekilde belirtildiği gibi. Her zaman Java'nın ayrıntılarıyla uğraşmak istemeyen insanlar için.
Scala nesne yönelimli ve işlevsel bir programlama dilidir ve Ruby veya Python programcıları buna daha yakın olabilirler. Bu programlama dillerinde birçok ortak iyi fikir kullanır.
Clojure , Lisp programlama dilinin bir lehçesidir, bu nedenle Lisp, Scheme veya Haskell geliştiricileri bu dil ile gelişirken kendilerini evlerinde hissedebilirler.
Scott Davis, Telif Hakkı 2008 tarafından basılan ve aynı yılın Nisan ayında basılan Pragmatik Programcılar kitabı "Groovy Tarifler: Java'nın tekerleklerini yağlamak" kitabını okuyorum.
Biraz eski ama kitap Groovy'nin kelimenin tam anlamıyla Java'nın bir uzantısı olduğunu açıkça gösteriyor. Tam olarak Java gibi çalışan Java kodu yazabilir ve dosyayı * .groovy olarak yeniden adlandırabilir ve iyi çalışır. Kitaba göre, gerekli kütüphaneleri eklersem bunun tersi doğrudur. Şimdiye kadar, deneyler bunu kanıtlıyor gibi görünüyor.
Açıkçası, sözdizimi tamamen farklı (Groovy Java'ya en yakın), ama sanırım bu sizin istediğin şey değil.
Bir Java uygulaması yazmak için bunları kullanmakla ilgileniyorsanız, Scala muhtemelen iyi bir seçim değildir, çünkü Java'dan değerlendirmenin kolay bir yolu yoktur , oysa Groovy özellikle bu amaç için uygundur.
eval
.