web-dev-qa-db-ja.com

将来の投資:Erlang vs. Scala

並行プログラミングが常により重要になるため、その点でErlang vs. Scalaについてどう思うかと思いました。Scalaはユーザーベースであり、Erlangよりも将来的に明るい可能性があります。さらに、ScalaはJavaの一種です。

これらの質問は常に少し主観的であることは知っていますが、ErlangまたはScalaの場合、より良い将来の投資は何でしょうか。それとも別の言語ですか?

64
Mark

Erlangは、並行するフォールトトレラントな通信システム向けに設計されています。大量のネットワーク接続を処理するサーバーを簡単に作成でき、(Erlangプロセスごとに1つのガベージコレクターのおかげで)サーバーはソフトリアルタイム特性を保持できます(つまり、GCが終了するまでサーバー全体が一時停止しません)。また、Erlangコードをホットスワップして、複数のノードに分散することなどもできます。そのため、(おそらく)最もスケーラブルなXMPPサーバー(ejabberd)はErlangで書かれています。 Yaws(Webサーバー)は、Erlangが優れている別の例です。 http://www.sics.se/~joe/apachevsyaws.html を参照してください。 Riak/Couchは、Erlangを使用したNoSQL DBビルドの例です。これらは、Erlangが最適な選択肢である問題です。

しかし、Erlang VMは生の計算に関してはJVMほど高速ではありません。そのため、計算集中型(財務モデリングなど)を行う必要があるとすぐに、JVMが優先プラットフォームになります。並行性モデル(アクター)は言語で焼き付けられていますが、解決しようとしている問題に合わない場合は、Erlangに満足できません。

Scalaは、並行性、水平スケーラビリティ、またはフォールトトレランスが言語の一部ではないという意味で、より一般的な言語です。ライブラリのレベルで解決されます(そのため、Scalaには少なくとも3つのアクターの実装があります)。良い点は、ドメインに適合する同時実行モデルを選択できることです。たとえば、ソフトウェアトランザクショナルメモリ(STM)が必要な場合は、Akkaを選択するだけで準備完了です( http://akka.io/ )。

さらに、Scalaを使用すると、「JVMの投資」と多数のJVMライブラリを活用できるという議論全体があります。

どちらの言語を使ってどのようなソフトウェアを作成するかについての情報を提供しなかったため、最終的な答えを出すのは困難です。とは言っても、上記のすべてを考えると、ScalaはErlangよりも「安全な」投資かもしれません(Erlang/OTPをまったくバッシングするのではなく、すばらしい言語/プラットフォームです)。

ところで。単一マシンの同時実行が重要な場合、Clojure( http://clojure.org/ )も見落としてはなりません(JVM言語も)。

更新1:Erlangが提供するものが好きで、構文が気に入らない場合は、 elixir-lang.org をご覧ください

更新2:STMはAkkaから削除されました-現在、アクター(型なしまたは型付き)とストリームの選択(混合/一致)があります。

87
romusz

それは問題ではない 1つだけを選んで、しばらくそれを使い続ける。何かを学び、クールなものを作り、その言語を使い続けるか、別の言語に進みます。

並行プログラミングの学習に関しては、どちらでも構いません。ここで重要なのは、何か新しいことを学ぶことであり、Erlangを使用して採用しようとしている求人がない限り、それは本当に重要ではありません。さらに、そのオープニングでErlangが必要になったとしても、Scalaをよく知っていれば、まだチャンスがあるでしょう。

考えてみてください。新しい言語を選択しようとして費やしたすべての時間は、選択した言語をすでに学習し始めていれば、より適切に使用できたはずです。

37
Robert Greiner

コアの両方の言語は、学ぶのが難しくなく、またそれらが提供する並行機能を学ぶのも難しくありません。実際、ScalaアクターはErlangアクターの影響を受けます。両方に行き、コンストラクトを調べて、並行性の問題でいくつかのテストを行います。

Javaを知っている場合、Scalaは、Erlangがプロローグに似ているため、より自然になります。

5
Diego Sevilla