1. ホーム
  2. java

[解決済み] パフォーマンスとJavaのインターオペラビリティについて。ClojureとScalaの比較

2023-07-08 23:19:34

質問

私はすでにClojureとScalaの様々な説明を読み、両方がそれぞれの場所を持っていることを理解しました。 ClojureとScalaの両方を比較するとき、私が完全な説明を得ていないいくつかの考慮事項があります。

1.) 2つの言語のうち、どちらが一般的に より速く ? これは言語機能によって異なることは承知していますが、性能の一般的な評価があれば助かります。 例えば Pythonの辞書が本当に速いことは知っています。 しかし、全体として、それは 多く よりも遅い言語です。 Clojureで行って、この先この問題に遭遇するのは避けたいですね。

2.) Javaとの相互運用性はどうですか? 私がこれまでに読んだのは、Scalaがネイティブのコレクション型を持っていて、大規模なJavaコードベースと統合するのが少し不器用であるのに対し、ClojureはJavaクラスと相互運用するために単純なIterable/Iterator中心の方法に従っているということだけです。 このことに関して何かもっと考え/詳細がありますか?

最終的に、もしclojureとscalaの間で十分に近い引き分けであれば、私は両方を試してみるかもしれません。 Clojureについて1つ言えることは、言語がまるで とても シンプルに見えます。 しかし、また、Scalaは非常に柔軟な型システムを持っています。 しかし、私はScalaが速いことを知っています(複数の個人的なアカウントに基づく)。 だから、もしClojureが著しく遅いのであれば:私は早く知りたいです。

どのように解決するのですか?

どちらの言語でも十分な速度が得られると思います。PythonとJavaを比較した場合、速度の差を言語のせいにするのは少し無理があるように思います。JavaはJITでコンパイルされるのに対し(モバイル端末を除く*)、Pythonはインタプリタです。どちらもバイトコードを使っているからと言って、その実装のパフォーマンスが比較にならないほど高くなるわけではありません。しかし、ScalaとClojureはどちらもJVM言語なので、同様のパフォーマンスを発揮するはずです。

ScalaはClojureに対していくつかの実装上の利点があり、多少高いパフォーマンスを期待できます。Scalaの静的型付けは、通常、Clojureのダック型付けよりも速度面で有利ですが、Clojureは は型ヒンティングをサポートしており、コードをかなり高速化することができます。可能性としては、普通のScalaは普通のClojureより速いですが、ボトルネックを最適化する必要があるだけです。プログラムの実行時間の大部分は、実際のコードの少量によって生成されます。

Javaとの相互運用については、Scalaの方がJavaに近いですが、両言語ともうまく相互運用できると思っています。

プログラミング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コンパイラを搭載しました。