java - groovy 用途




パフォーマンスとJavaの相互運用性について:Clojure vs. Scala (6)

私はすでにClojure vs. Scalaのさまざまなアカウントを読んでいますが、どちらもその場所があることを認識しています。 ClojureとScalaの両方を比較するときに、私が完全な説明を取得していないことを考慮する必要があります。

1.)どちらの言語が一般的に高速ですか? 私はこれが言語の特徴によって異なることを認識していますが、パフォーマンスの一般的な評価が役立ちます。 たとえば、私はPython辞書が本当に速いことを知っています。 しかし全体として、それはJavaよりはるかに遅い言語です。 私はClojureと一緒にこの問題に挑戦したくありません。

2.)Javaとの相互運用性はどのようになっていますか? 私が読んだのは、Scalaにはネイティブのコレクション型があり、Javaのコードベースと統合するのはちょっと面倒ですが、Clojureは単純なIterable / Iterator中心のJavaクラスとの相互運用方法に従っています。 これ以上の考え/詳細は?

結局のところ、クロージャーとスカラの間に十分近い引き分けであれば、私は両方を試してみるかもしれません。 Clojureについての1つのことは、言語が非常に単純であるよう見えることです。 しかし、Scalaは非常に柔軟な型システムを持っています。 しかし、私はScalaが(複数の個人アカウントに基づいて)高速であることを知っています。 だから、Clojureの方がかなり遅い場合は、後でなく早く知りたがっています。


  1. 慣用的な Scalaは慣用的な Clojureよりも高速であり、そのままであろう。
  2. ScalaとClojureはどちらもJavaの上に簡単に座ります。 どちらもそれの下にうまくいきません。

コードが全体的にタイムクリティカルまたはスペースクリティカルである場合は、Javaを使用してください。 しかしそれはあなたがそうだと思っても、そうではありません。

コンピュータ言語ベンチマークゲームは 、Clojureの真のリソースコストについてはほとんど分かりません。 Clojureデータ構造は採用されていません。 機能およびシーケンスの抽象化は現れません。

Clojureはシンプルに見えるかもしれません。 そうではありませんが、表現力があります。 Javaより5倍遅く実行されるかもしれませんが、ソースは5倍小さい(YMMV)。 ほとんどのアプリケーションでは、これは大きな勝利です。 しかし、いくつかは、他の多くの一部のために、それは壊滅的な損失です。

Clojure言語の経験では、Clojureで表現される簡潔かつ適切な(パフォーマンス上の)部分とJavaでの作業が必要な部分に問題がきれいに分割されるかどうかを事前に伝えることが可能だと思います。

  • Scala Liteのために行くことができます:ScalaでJavaイディオムを書く。 あなたは、簡潔さ、目でわかりやすい構文、複雑ではあるが複雑な型のシステムを得るでしょう。
  • Clojureのようなものはありません.ClojureにJavaの慣用句を書くことはまったく無意味です。 あなたが得るのは、遅いJavaです。それは、それを表現するために使用されるイディオムの粒を横断するため、理解しにくいです。

ScalaはJavaが正しく行われたと言われています。 ClojureはJavaのようなものではありません。 あなたはLispが正しく行われたと言うかもしれません - 大胆なもの、馬鹿げた、主張するもの - 真実になるかもしれません。


ClojureとScalaはまったく異なる2種類のプログラミング言語であることに注意してください.Clojureは機能的なLispのような言語であり、オブジェクト指向ではありません 。 Scalaは、関数型プログラミング機能を持つオブジェクト指向言語です。

私の意見では、言語(機能、OO、...)の特徴や概念は、(その言語の特定の実装の)パフォーマンスよりも、言語を選択するための重要な基準です。利用可能な成果の高い実装がない言語にトラップされたい

Scalaはオブジェクト指向だから機能的なプログラミングを学ぶことができます(興味があれば)。 一方、OOを気にせず、 "純粋な"関数型プログラミングを学びたいなら、Clojureを試してみてください。


Computer Language Benchmark Game 」によって作成された統計は、おそらくあなたが探している最高のものです。

彼らは詳細であり、多くの言語を比較することができます。 問題は、彼らがClojureをカバーしていないということです:(

つまり、何かを提出するのはかなり簡単です - それはすべてオープンソースです。

統計では、Scalaはかなり速いです。


PragPubの2010年11月号では、Clojure-Javaの相互運用性について説明しています。 Javaメソッドの呼び出しは簡単ですが、Javaクラス/インタフェースの拡張は全く異なります。

一方、ScalaはJavaに非常に近いものです。 Scala-Javaの相互運用性については、 http://www.codecommit.com/blog/java/interop-between-java-and-scalaで詳述されていhttp://www.codecommit.com/blog/java/interop-between-java-and-scala

Javaコードの呼び出しとJavaクラス/インタフェースの拡張は、Scalaコードの呼び出しと同じように機能します。 Scalaの型システムはJavaのものよりはるかに強力であるため、Javaのジェネリックスを扱う場合には、いくつかの苦境があります。 Java Beanの規則に従ってゲッターとセッターを作成するには、アノテーションが必要です。

JavaからScalaを呼び出すのはほとんどの場合単純ですが、たとえばScalaのコンパニオンオブジェクトでは、バイトコードにどのようにコンパイルされているかを知る必要があります。 また、Javaからの非抽象メソッドの特性を使用することは複雑になり、特殊文字を使用してメソッドを呼び出すには、それらがバイトコードでどのようにコード化されているかを知る必要があります。


相互運用性に関しては、私はClojureを話すことができませんが、私はそれがScalaと同様の状況になると考えています。

ScalaからJavaを呼び出すことは簡単です。

外部APIをScalaとJavaの共通点に適合させていれば、JavaからScalaを呼び出すことは簡単です。 たとえば、ScalaオブジェクトはJavaの静的メソッドのようにいくつかの方法で使用されますが、同じことではありません。 Scalaクラスは、Javaで面白そうな名前のクラスにコンパイルされることがあります。

あなたは多くを混ぜ合わせて一致させたくありません。 多くのJavaライブラリを使用するScalaやClojureのビルドコンポーネントは非常に実現可能です。 もちろん、Javaからこのコンポーネントを呼び出すことはできますが、実行したくないのは、JavaからScalaプログラムで使用するためのScala APIを使用することです。

SVNは「CVSが正しく行われた」と主張しています。 私の見解では、ScalaはJavaで正しく行われています。


私はいずれかの言語があなたのために十分に速いと思う。 PythonとJavaを比較すると、言語の速度差を非難するのは少し不合理なようです。 JavaはコンパイルされたJITです(ただし、モバイルデバイス*は例外です)。一方、Pythonは解釈されます。 どちらもバイトコードを使用しているからといって、実装がリモートで同等のパフォーマンスを持つことを意味するわけではありません。 しかし、ScalaとClojureの両方がJVM言語であるため、同様のパフォーマンスが必要です。

ScalaはClojureに比べいくつかの実装上の利点がありますが、いくらか高いパフォーマンスが期待されます。 Scalaの静的な型定義は、通常、Clojureのダックの型定義よりもスピードの点で優れていますが、Clojure コードを大幅に高速化できる型ヒントをサポートしています。 おそらく通常のScalaは通常のClojureより高速ですが、ボトルネックを最適化するだけで済みます。 ほとんどのプログラムの実行時間は、実際のコードが少量生成されます。

Javaとの相互運用性に関して、ScalaはJavaに近いですが、両方の言語がうまく相互運用できると確信しています。 Programming Clojureでは、 Stuart Hallowayは次のように書いています。あなたはJavaコードから到達できるものにアクセスできます。

Scalaの著者、Martin Odersky SunのJavaコンパイラを書いているので、Scala側にもボールが落ちていないと思います。 :-)

私はRubyも好きですが、あなたは2つのより良い言語を選ぶのは難しいでしょう。 あなたはどちらを試してみるのがなぜ心配ですか? 両方を試してみませんか? Scalaは "次のJava"になる可能性が高いですが、Lispは50年以上もやっていなくてもやっと離陸すると想像するのは難しいです。 しかし、Lispは独自の抽象レベルにあり、Clojureはかなりシンプルであるため、Scala + Clojureは(ちょっと複雑な)Scalaよりもはるかに難しくありません。私はあなたがうれしくなると確信していますそれ。

そして、それについては、彼らは相互運用します...

* dalvik(アンドロイドのJVM)は2010年に2.2版でJITコンパイラを手に入れました





jvm