web-dev-qa-db-ja.com

Scala対Groovy対Clojure

Scala、Groovy、Clojureの主な違いについて説明してください。私はこれらのコンパイルのそれぞれがJVM上で実行されることを知っていますが、私はそれらの間の簡単な比較をお願いします。

676
James Fassett

Groovy は動的に型付けされた言語で、その構文はJavaに非常に近く、より軽いコードと少ない定型句を可能にする多くの構文の改善があります。それはコンパイルされるのと同様にインタプリタを通り抜けることができます、それは新しい構文を学ぶ必要なしに速いプロトタイピング、スクリプト、そして動的言語の学習のためにそれをよくします(あなたがJavaを知っていると仮定して)。 Groovy 2.0からは、 静的コンパイル のサポートも増えています。 Groovyはクロージャーをサポートし、やや機能的なスタイルでのプログラミングをサポートしていますが、それでも関数型プログラミングの従来の定義からは程遠いものです。

Clojureソフトウェアトランザクションメモリ のようないくつかの高度な機能を持つLISPの方言です。 ) LISPが好きで、JVMの下でそのようなものを使いたいのであれば、Clojureがあなたのためです。おそらくJVM上で動作する最も 機能的な言語 であり、確かに最も有名な言語です。また、他のLISP方言よりも 不変性 を強く重視しているため、機能言語愛好家の心に近づきます。

Scala は、Javaよりも完全なオブジェクト指向言語で、最も先進的な 型システムの1つです 研究以外の言語で利用可能で、確かにJVM上で最も先進的なタイプのシステムです。また、オブジェクト指向を損なうことなく、関数型言語の多くの概念と機能を兼ね備えていますが、関数型言語の特性への妥協は、後者のいくつかの愛好家を先送りにします。

Groovyは、Grailsで広く受け入れられている人気のあるWebフレームワークです。また、Mavenに代わる人気のあるGradleビルドシステムも強化されています。私は個人的には、JythonとJRubyが他の言語に比べてJVMの世界に浸透し始めていることから、ユーティリティは限られた言語であると私は思います。

Clojureは、いくつかの非常に興味深い機能を割り引いても、JVM上のLISP方言であることによって強い魅力を持っています。それはその人気を制限するかもしれない、当然のことですが、私はそれが長い間それの周りに忠実なコミュニティを持つことを期待しています。

ScalaはJavaと直接競合することができ、ほとんどすべての面でそれを実行することができます。現時点では、現在のところ人気があるわけではありません。強力な企業支援の欠如は、企業環境への受け入れを妨げる可能性があります。言語がどのように進化するかという意味でも、これはJavaよりもはるかに動的な言語です。言語の観点からは、それは良いことです。何千行ものコードを書くことを計画しているユーザーの観点からはそうではありません。

最後の説明として、私はScalaに非常に精通していて、他の2つについてしか知りませんでした。

874

スカラ

Scalaは Funnel として知られる純粋な関数型言語から発展したもので、ほぼすべてのJava構文のクリーンルームでの実装を表しています。言語の機能的性質を損なう場所そのような違いには、静的メソッドではなくシングルトンオブジェクト、および型推論が含まれます。

これの多くは、Martin Oderskyが Pizza 言語を使った以前の研究に基づいていました。 OO/FPの統合​​は単なるクロージャーをはるかに超えており、言語はポストファンクショナルとして記述されています。

それにもかかわらず、それは多くの点でJavaに最も近いものです。主にOOのサポートと静的型付けの組み合わせによるものですが、それはまた、Javaと緊密に統合されるべきであるという言語設計における明白な目標によるものです。

グルーヴィーな

Groovyは、Javaによる2つの最大の批判に、次のように明示的に取り組んでいます。

  • 動的に型付けされているため、多くの定型句が削除されます。
  • 言語にクロージャを追加します。

それはおそらく構文的にJavaに最も近い、ClojureとScalaが提供するより豊富な機能構成のいくつかを提供しないが、それでも明確な進化的改善を提供する - 特にスクリプトスタイルプログラムを書くため。

Groovyは3つの言語の中で最も強力な商業的支援を受けており、その大部分はスプリングソースを介しています。

クロージュ

ClojureはLISPファミリーの関数型言語であり、動的に型付けされています。

STMサポートのような機能は、Scalaが Akka のようなサードパーティーのライブラリを必要とするのに対して、それには最高のすぐに使える同時実行サポートを提供します。これを複製する。

構文的には、それはまた典型的なJavaコードからの3つの言語のうち最も遠いものです。

私はScalaに最も精通していることも開示しなければなりません:)

219
Kevin Wright

私はclojureで遊ぶ時間がありませんでした。しかし、scala対groovyにとって、これはJames Strachan - Groovy作成者からの言葉です。

「javacの長期的な置き換えのための私のヒントはScalaですが、私はそれに非常に感心しています。Martin Odersky、Lex Spoon、Bill VennersによるScalaでのプログラミングの本を2003年に見せてくれたのです。 Groovyを作成したことは一度もないでしょう。」

記事全体を読むことができます ここで

68
Thai Tran

彼らはどこから来たのか、あるいはどの開発者を主にターゲットにしているのかによって区別することができます。

Groovy は、スクリプト版のJavaに少し似ています。長い間、Javaプログラマーは、大きなアーキテクチャーに裏打ちされたアジャイルアプリケーションを構築するときには、自宅にいるように感じます。 Groovy on Grailsは、その名前が示すようにRailsフレームワークに似ています。常にJavaの冗長性を気にしたくない人のために。

Scala はオブジェクト指向の関数型プログラミング言語で、RubyやPythonのプログラマーはこれにもっと近いと感じるかもしれません。それはこれらのプログラミング言語で見つかるかなり多くの一般的な良い考えを使います。

Clojure はLISPプログラミング言語の方言であるため、LISP、Scheme、またはHaskellの開発者はこの言語を使って開発している間は自宅にいるように感じるかもしれません。

30
Mehmet Duran

Scott DavisによるPragmatic Programmersの著書「Groovy Recipes:Greating the Javaの輪」を読んでいます。著作権2008年で、同じ年の4月に印刷されました。

ちょっと時代遅れですが、この本はGroovyが文字通りJavaの拡張であることを明らかにしています。私はJavaと全く同じように機能するJavaコードを書き、ファイル名を* .groovyに変更してもうまくいきます。この本によると、必要なライブラリを含めるとその逆が成り立ちます。これまでのところ、実験はこれを裏付けているようです。

8
Jim Collings

明らかに、構文は完全に異なります(GroovyがJavaに最も近い)、しかし私はそれがあなたが求めているものではないと思います。

Javaアプリケーションをスクリプト化するためにそれらを使うことに興味があるなら、Scalaはおそらく Javaからそれを評価する 簡単な方法がないので、おそらく良い選択ではありません、Groovyは特に適していますその目的のために。

4
Thilo