Clojure vs. Scalaのさまざまな説明をすでに読んでいますが、両方にそれぞれの場所があることを認識しています。比較についての完全な説明を取得していないいくつかの考慮事項があります。 ClojureとScalaの両方:
1.)2つの言語のどちらが一般的により速いか?これは言語の機能によって異なりますが、パフォーマンスの一般的な評価が役立つことを理解しています。例えば:Python辞書は本当に速い。しかし全体として、much遅い言語ですJavaよりも、Clojureを使用してこの問題に出くわすのは嫌です。
2.)Javaとの相互運用性はどうですか?これまでに読んだのは、Scala=にはネイティブコレクションタイプがあり、大きなJavaコードベースと統合するのに少し不器用になる一方で、ClojureはJavaクラス。これに関する他の考え/詳細はありますか?
最終的に、clojureとscalaの間に十分近いドローであれば、両方を試してみます。 Clojureの1つのことは、言語がシンプルだと思うveryしかし、再び、Scalaは非常に柔軟な型システムを持っています。しかし、私は知っていますScalaは複数の個人アカウントに基づいて高速です。大幅に遅くなります。遅くなるのではなく、早く知りたいです。
どちらの言語でも十分に高速になると思います。 PythonとJavaを比較するとき、速度の違いを言語のせいにするのは少し不合理に思えます。 JavaはコンパイルされたJIT(モバイルデバイス*を除く)であるのに対し、Pythonは解釈されます。両方がバイトコードを使用しているからといって、実装のパフォーマンスがリモートでも匹敵するというわけではありません。ただし、ScalaとClojureはどちらもJVM言語なので、同様のパフォーマンスが必要です。
ScalaにはClojureに比べていくつかの実装上の利点があり、多少高いパフォーマンスが期待できます。 Scalaの静的型付けは通常、Clojureのアヒル型付けよりも速度の点で有利ですが、Clojuredoesは、コードを大幅に高速化できる型ヒントをサポートします。おそらく、通常のScalaは通常のClojureよりも高速ですが、ボトルネックを最適化するだけで済みます。プログラムの実行時間の大部分は、少量の実際のコードによって生成されます。
Javaとの相互運用に関しては、ScalaはJavaに近いですが、両方の言語が相互運用できると確信しています。 InClojureのプログラミングで、Stuart Hallowayは次のように書いています: "[アクセスできます]Java code。」。
Scalaの著者Martin OderskywroteSunのJavaコンパイラなので、ボールが落ちていないと思いますScala側のいずれか。 :-)
Rubyも好きですが、2つの優れた言語を選択するのは難しいでしょう。なぜどれを試してみるのが心配ですか?両方試してみませんか? Scalaは「次のJava」である可能性が高くなりますが、LISPが50年以上もそうしないと最終的に離陸することを想像するのは困難です。しかし、LISPが独自の抽象化レベルにあり、Clojureが非常に単純であることは明らかです。したがって、Scala + Clojureは、単なる(かなり複雑な)Scalaほど難しくありません。 _そして、あなたがそれをしてくれてうれしいと確信しています。
そしてその点で彼らは相互運用します...
* dalvik(AndroidのJVM)は2010年に2.2バージョンでJITコンパイラーを取得しました
現在のJVM Scalaは、静的型付けの利点があります。これは、動的型付けのJVMサポート(リフレクション)が遅いためです。実際には、1つScala同じ技術、構造タイプを使用して実装する必要がある機能は、多くの場合、まさにこの理由で警告されます。
また、Scalaは可変オブジェクトを正常に受け入れ、一部のアルゴリズムは可変性を実装するのがより高速です。
ScalaとJavaは基本的にクラスベースの言語であるため、より簡単に相互運用できます。あるいは、おそらくよりシームレスに。AJavaクラスはScalaのクラスであり、ScalaクラスはJavaのクラスです。ScalaのシングルトンまたはJavaの静的メンバーに関しては、特にフレームワークが期待される場合、問題が発生する可能性があります特定の方法で機能するもの。
だから私はScala両方のこれらアカウントに行きます。Clojureは、多くの点で、より良いlanguageであり、確かに持っていますScalaには(これまでのところ)存在しない非常に興味深い機能がありますが、完全に機能することでそのようなメリットを享受できます。そうするつもりなら、Clojureの方が優れている可能性があります。
ClojureとScalaはまったく異なる2種類のプログラミング言語です。ClojureはLISPに似た機能的な言語であり、notオブジェクト指向です。Scalaは、関数型プログラミング機能を備えたオブジェクト指向言語です。
私の意見では、言語の機能と概念(機能、オブジェクト指向など)は、(その言語の特定の実装の)パフォーマンスよりも、言語を選択するためのはるかに重要な基準です。利用可能なパフォーマンスの良い実装がない言語に閉じ込められたい。
Scalaはオブジェクト指向ですが、関数型プログラミング(もし興味があるなら)を学ぶこともできるので、私はScalaに行きます。一方、OOを気にせず、「純粋な」関数型プログラミングを学びたい場合は、Clojureを試してください。
「 Computer Language Benchmark Game 」によって生成される統計は、おそらく最高の結果です。
それらは詳細であり、多くの言語を比較できます。問題は、彼らがClojureをカバーしていないことです:(
とはいえ、何かを提出するのは非常に簡単です。すべてオープンソースです。
統計によると、Scalaはかなり速い。
コード全体で時間が重要な場合やスペースが重要な場合は、Javaを使用してください。しかし、そうだと思っても、そうではありません。
Computer Language Benchmark Gameは、Clojureの真のリソースコストにほとんど光を当てません。 Clojureデータ構造は使用されません。機能およびシーケンスの抽象化は表示されません。
Clojureは単純に見えるかもしれません。そうではありませんが、表現力豊かです。 Javaよりも5倍遅いかもしれませんが、ソースは5倍(YMMV)です。ほとんどのアプリケーションのほとんどにとって、これは大きな勝利です。しかし、一部の人にとって、そして多くの他の人の一部にとっては、それは壊滅的な損失です。
Clojure言語の経験があれば、Clojureで簡潔かつ適切に(パフォーマンスの観点から)表現できる部分とJavaで行う必要がある部分に問題が明確に分割されるかどうかを事前に伝えることができると思います。
ScalaはJava done rightと言われています。 ClojureはJavaのようなものではありません。あなたはそれがLISP done right-太字である人は馬鹿げた主張を言うだろうと言うかもしれません-それは真実であることが判明するかもしれません。
相互運用性については、私はClojureについて話すことはできませんが、Scalaと同様の状況になると予想しています。
ScalaからJavaを呼び出すのは簡単です。
Scala from Java=から外部APIをScalaとJava。たとえば、ScalaオブジェクトはJavaの静的メソッドのようないくつかの方法で使用されますが、同じものではありません。Scalaクラスは、 Javaで面白そうに見える名前を持つクラスの数。
あなたは多くを混ぜて一致させたくないでしょう。 Scalaまたは多くのJavaライブラリを使用するClojureは非常に実行可能です。もちろん、Javaからこのコンポーネントを呼び出すことはできますが、やりたいのは、Scala JavaのプログラムScalaによる使用を目的としたAPI。
SVNは「CVSが正しく行われた」と主張しています。私の見解では、Scala is Java done right。
PragPubの2010年11月号 は、Clojure-Javaの相互運用性について説明しています。 Javaメソッドの呼び出しは簡単ですが、Javaクラス/インターフェースの拡張はまったく異なります。
一方、ScalaはJavaに非常に近いです。 ScalaとJavaの相互運用性は、 http://www.codecommit.com/blog/Java/interop-between-Java-and-scala で詳しく説明されています
Javaコードの呼び出しとJavaクラス/インターフェースの拡張は、Scalaコードの呼び出しと同じように機能します。 Scalaの型システムはJavaの はるかに強い であるため、いくつかの問題点は、Javaのジェネリックを処理するEdgeの場合です。 Java Beanの規則 注釈が必要です に従ってゲッターとセッターを作成します。
ScalaからJavaを呼び出すことはほとんどの場合簡単ですが、たとえば、Scalaのコンパニオンオブジェクトは、バイトコードにコンパイルされる方法を知る必要があります。また、Javaの非抽象メソッドで特性を使用することは複雑であり、特殊文字を使用してメソッドを呼び出すには、バイトコードでエンコードされる方法を知る必要があります。
現在(2010年5月現在)、Clojureの最新の1.2ブランチに注目する価値があります。これには、プリミティブ型および静的型付け(多くの型ヒントおよびプロトコルによる)に対する多くの追加サポートが含まれます。
私の理解では、純粋なJavaでまったく同じコードを記述するのと同等の速度を得るために、必要なときにこれらの機能を使用できるということです。