scala - 斯卡拉與Groovy與Clojure




language-comparisons (4)

斯卡拉

Scala從純粹的函數式語言Funnel演化而來,代表了幾乎所有Java語法的潔淨室實現,不同之處僅在於可以做出明顯的改進或者會損害語言的功能性。 這種差異包括單身對象而不是靜態方法,以及類型推斷。

其中很大一部分是基於Martin Odersky之前的Pizza語言工作。 OO / FP集成遠遠超出單純的關閉,並導致語言被描述為後功能。

儘管如此,它在很多方面都離Java最近。 主要是由於面向對象支持和靜態類型的結合,但是由於語言設計的明確目標,它應該與Java非常緊密地集成。

Groovy的

Groovy明確地解決了Java中兩個最大的批評

  • 被動態地鍵入,這將刪除大量的樣板文件
  • 添加關閉語言。

它可能在語法上離Java最近,並沒有提供一些Clojure和Scala提供的更豐富的功能結構,但仍然提供了明確的進化改進 - 尤其是編寫script-syle程序。

Groovy擁有三種語言最強大的商業支持,主要是通過Springource。

Clojure的

Clojure是LISP系列中的一種功能語言,它也是動態類型的。

STM支持等特性為其提供了一些最佳的即用型並發支持,而Scala則需要第三方庫(如Akka)來複製此類支持。

在語法上,它也是典型Java代碼中三種語言中最遠的一種。

我也必須透露我最熟悉斯卡拉:)

有人可以解釋一下Scala,Groovy和Clojure之間的主要區別。 我知道每個這些編譯器都要在JVM上運行,但我希望對它們進行簡單的比較。


Groovy是一種動態類型語言,其語法與Java非常接近,並且有許多語法上的改進,允許使用更輕的代碼和更少的樣板。 它可以通過解釋器運行,也可以編譯,這使得它不需要學習新的語法(假設你知道Java)就可以快速建立原型,腳本和學習動態語言。 從Groovy 2.0開始,它也越來越支持靜態編譯 。 Groovy支持閉包,並支持編程功能,雖然它與傳統的函數式編程定義相差甚遠。

Clojure是Lisp的一種方言,具有軟件事務內存等一些高級功能。 如果你喜歡Lisp並且想在JVM下使用類似的東西,Clojure會為你服務。 它可能是運行在JVM上的功能強大的語言 ,當然也是最有名的語言 。 此外,它比其他Lisp方言更強調immutability ,這更接近功能性語言愛好者的心臟。

Scala是一種完全面向對象的語言,比Java更具有面向對象的特點,它具有非研究語言中最先進的類型系統之一,當然也是JVM上最先進的類型系統。 它還結合了許多功能語言的概念和特徵,而不會影響對象的方向,但它在功能語言特徵上的妥協讓後者的一些愛好者望而卻步。

Groovy在Grails中擁有良好的接受度和流行的Web框架。 它還支持Gradle構建系統,該系統正在成為Maven的流行替代方案。 我個人認為這是一種功能有限的語言,尤其是Jython和JRuby開始在JVM-land上進行攻擊時,與其他攻擊者相比。

Clojure甚至會打折一些非常有趣的功能,只是在JVM上作為Lisp方言才有吸引力。 它可能會限制它的受歡迎程度,但我希望它能在很長一段時間內擁有忠實的社區。

Scala可以直接與Java展開競爭,並在幾乎所有方面為其賺錢。 當然,它目前無法贏得人氣,而缺乏強大的企業支持可能會阻礙其對企業環境的接受程度。 從語言演化的角度來看,它也是比Java更動態的語言。 從語言的角度來看,這是一件好事。 從計劃寫入數千行代碼的用戶角度來看,並非如此。

作為最終披露,我對斯卡拉非常熟悉,只知道其他兩位。


我從來沒有時間玩clojure。 但是對於scala和groovy,這是James Strachan的 - Groovy的創造者的話

“儘管我的長期替代javac的提示是Scala,但我對它印象深刻!我可以誠實地說,如果有人在2003年向我展示了Martin Odersky,Lex Spoon和Bill Venners編寫的Programming in Scala書籍, 'd可能從未創建過Groovy。“

你可以在here閱讀整個故事


我正在閱讀Scott Davis編著的Pragmatic Programmers一書“Groovy Recipes:Greasing the Java of Java”,版權2008,並於同年4月出版。

這有點過時,但本書明確表示Groovy實際上是Java的擴展。 我可以編寫完全像Java一樣運行的Java代碼,並將文件重命名為* .groovy,並且工作正常。 根據該書,如果我包括必要的圖書館,則情況正好相反。 到目前為止,實驗似乎證明了這一點。







language-comparisons