Scala、Groovy、Clojureの主な違いについて誰かが説明してくれませんか。JVMで実行するためにこれらの各コンパイルを知っていますが、それらを単純に比較したいと思います。
Scala、Groovy、Clojureの主な違いについて誰かが説明してくれませんか。JVMで実行するためにこれらの各コンパイルを知っていますが、それらを単純に比較したいと思います。
回答:
Groovyは動的に型付けされた言語であり、その構文はJavaに非常に近く、多くの構文を改善することでコードの軽量化とボイラープレートの削減を実現しています。インタプリタを介して実行することも、コンパイルすることもできるため、新しい構文(Javaを知っていることが前提)を習得することなく、高速プロトタイピング、スクリプト、動的言語の学習に適しています。Groovy 2.0以降、静的コンパイルのサポートも増加しています。Groovyはクロージャーをサポートし、多少関数型のプログラミングをサポートしていますが、関数型プログラミングの従来の定義とはかなりかけ離れています。
Clojureは、ソフトウェアトランザクションメモリなどのいくつかの高度な機能を備えたLispの方言です。Lispが好きで、JVMでLispのようなものを使用したい場合は、Clojureが最適です。それはおそらくJVM上で実行されている最も機能的な言語であり、確かに最も有名な言語です。また、他のLisp方言よりも不変性に重点が置かれているため、関数型言語の愛好家の心に近づきます。
ScalaはJavaよりも完全にオブジェクト指向の言語であり、非研究言語で利用できる最も高度な型システムの 1つであり、JVMで確かに最も高度な型システムです。また、オブジェクト指向を損なうことなく、関数型言語の多くの概念と機能を組み合わせていますが、関数型言語の特性に対する妥協は、後者の一部の愛好家を先延ばしにしています。
Groovyは、Grailsで広く受け入れられ、人気のあるWebフレームワークを持っています。また、Mavenに代わる人気の高いGradleビルドシステムにも対応しています。個人的には、JythonとJRubyが他のものと比較してJVMランドに浸透し始めているので、それは実用性が限られている言語だと思います。
Clojureは、いくつかの非常に興味深い機能を割り引いても、JVMのLisp方言であるというだけの強い魅力を持っています。それはその人気を制限するかもしれません、当然ですが、私はそれがその周りに長い間忠実なコミュニティを持つことを期待しています。
ScalaはJavaと直接競合することができ、ほとんどすべての面でお金を稼ぐことができます。もちろん、現時点で人気を競うことはできません。強力な企業支援の欠如は、企業環境での受け入れを妨げる可能性があります。また、言語の進化という意味では、Javaよりもはるかに動的な言語です。言語の観点からは、それは良いことです。何千行ものコードを記述することを計画しているユーザーの観点から、そうではありません。
最後の開示として、私はScalaに非常に精通しており、他の2つだけを知っています。
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に精通していることも開示する必要があります。
clojureで遊ぶ時間がなかった。しかし、Scala対Groovyの場合、これはJames Strachanの言葉です-Groovyクリエイター
「しかし、javacの長期的な置き換えとしての私のヒントはScalaです。私はそれに非常に感銘を受けました。2003年に、Martin Odersky、Lex Spoon&Bill Vennersによる 『Programming in Scala』の本を誰かが見せてくれたなら、正直に言うことができます。おそらくGroovyを作成したことはないでしょう。」
それらはどこから来ているのか、または彼らが主に対象としている開発者によって区別することができます。
Groovyは、Javaのスクリプトバージョンに少し似ています。長い間Javaプログラマーは、大きなアーキテクチャーに支えられたアジャイルアプリケーションを構築するとき、くつろいでいます。Grails上のGroovyは、その名前がRailsフレームワークに似ていることを示唆しているとおりです。常にJavaの冗長性を気にしたくない人のために。
Scalaはオブジェクト指向で関数型のプログラミング言語であり、RubyまたはPythonのプログラマーはこの言語に近いと感じるかもしれません。これは、これらのプログラミング言語に見られる一般的な優れたアイデアを数多く採用しています。
ClojureはLispプログラミング言語の方言なので、Lisp、Scheme、またはHaskellの開発者は、この言語で開発しているときに居心地よく感じることができます。
スコットデイヴィスによるPragmatic Programmersの本「Groovy Recipes:Greasing the wheel of Java」を読んでいます。著作権2008で、同年4月に印刷されました。
それは少し時代遅れですが、本はGroovyが文字通りJavaの拡張であることを明らかにします。Javaとまったく同じように機能するJavaコードを記述して、ファイル名を* .groovyに変更すると、問題なく動作します。この本によると、必要なライブラリーを含めれば、逆のことが言えます。これまでのところ、実験はこれを裏付けているようです。
明らかに、構文は完全に異なります(GroovyはJavaに最も近いものです)が、それはあなたが求めているものではないと思います。
それらを使用してJavaアプリケーションをスクリプト化することに関心がある場合、Java から評価する簡単な方法がないため、Scalaはおそらく良い選択ではありませんが、Groovyはその目的に特に適しています。
eval
必要ありません。