F#のパフォーマンスとErlangのパフォーマンス、ErlangのVMが高速であることの証明はありますか?


19

私は関数型プログラミングの学習に時間を費やしてきたので、チュートリアルや例に手を出すのではなく、プロジェクトの作成を始めたい部分に来ました。

私の研究を行っている間、Erlangは並行ソフトウェアの作成に関しては非常に強力であるようです(これが目標です)が、開発用のリソースとツールはMicrosoft開発製品ほど成熟していません。

F#はLinux(Mono)で実行できるため、要件は満たされますが、インターネットを調べていると、F#とErlangの比較が見つかりません。現時点では、Erlangが最も報道されているという理由だけで傾いていますが、2つのシステムの間に実際にパフォーマンスの違いがあるかどうかは興味があります。

私は.NETでの開発に慣れているため、おそらくErlangよりもF#の方がはるかに高速になりますが、F#がErlangと同じくらいスケーラブルであることを納得させるリソースは見つかりません。

シミュレーションに最も興味があります。これは、多くの迅速に処理されたメッセージを永続ノードに送信します。

私が尋ねようとしているもので良い仕事をしていないなら、さらなる検証を求めてください。


12
言語には速度がありません。特定の入力で特定のプログラムを実行する特定の言語実装(これは、プログラムによっては外部世界全体を含む場合があります)には速度があります。

1
F#は.NETランタイムで実行され、Erlangは独自のVMで実行されます。Erlangのプロセスは、そのドメイン内にある言語(Scalaなど)に対して軽量であると見なされます。ノードを生成して多くのメッセージを渡すシミュレーションの場合、.NET / MonoランタイムはErlangのVMと同じくらい良いですか、それともErlangのVMは優れていますか?
afuzzyllama

3
@delnan:言語にはパフォーマンス特性があります。
ジョンハロップ

2
@JonHarropどうして?プログラミング言語は、単なる構文と関連するセマンティクスにすぎません。

1
@delnan:セマンティクスは最適化に制限を課します。たとえば、動的に型指定された言語は、実際には最適化が非常に困難です。JVMに値タイプがないため、.NETよりもはるかに多くのヒープ割り当てが発生し、その結果、GCにより大きな負荷がかかります。コードジェネレーターと同様に、ガベージコレクターは、パフォーマンスを向上させるために不変性などの情報を悪用できます。プログラミング言語の設計は、これに大きな影響を及ぼします。
ジョンハロップ

回答:


21

「実行可能」とはどういう意味ですか?「最も多くの報道を受ける」は、必ずしも言語を選択する最良の方法ではありません。

Erlangの名声は、大規模な並列化の能力にあります。そのため、エリクソンの電話スイッチで一般的に使用されています。Erlangはソフトリアルタイムなので、特定のパフォーマンスを保証できます。

F#は、.NET Jitterの最適化機能の恩恵を受けます。さらに、言語自体は高性能の関数型言語になるように設計されています(OCamlのバリアントであり、その速度のために金融業界で広く使用されています)。

最終的に、数百万の小さなエージェントを同時に実行することを計画しない限り(これはErlangが最適化されているものです)、F#はタスクに応じる必要があります。

このページでは、Erlangの適切な使用例について説明します。


「実行可能」とは、スケーラブルを意味します。プレスを持っているからといって、その言語が必ずしも優れているというわけではないことは知っていますが、Erlangは(少なくともエリクソンによって)証明されているようです。エージェントとはどういう意味ですか?プロセス?
afuzzyllama

1
はい。Erlangは、エリクソンのスイッチで同時に多くの電話を処理することが実証されています。ユースケースが似ているかどうかを把握する必要があります。私はそれを比較的専門的なユースケースとして見ています。この特性がアプリケーションにない場合、Erlangを使用する利点はないと思います。Erlangのページには、Erlangが適さないいくつかのユースケースが実際に記載されています。
ロバートハーヴェイ

2
エージェント、アクター、それは関数型言語の議論でよく出てくる設計コンセプトです。私はあなたがまだそれに出くわしていないことに驚いています。en.wikipedia.org/wiki/Agent-based_model
パトリックヒューズ

言い換えれば、Erlangが提供する種類の大規模な拡張性(現在または最終的に)が必要ですか?ほとんどのプログラムはそうではありません。
ロバートハーベイ

1
F#にはエージェントモデルもあります。Erlangの場合と同じような、やや不可解な名前の「MailboxProcessor」を使用します。ただし、それぞれの相対的なパフォーマンス特性についてはコメントできません。
FinnNk

7

これらの2つの言語のパフォーマンスは、アプリケーションとプログラミングスタイルに大きく依存するため、この主題については、客観的な説明はほとんどありません。

私ができる唯一のアドバイスは、F#には静的型システムのパフォーマンスの利点があり、CLRはパフォーマンスを向上させるためにこれを活用して良い仕事をするということです。F#には非同期エージェントとメッセージパッシングがありますが、最適化されておらず、同期コードは多くの場合10倍以上高速です。

Erlangは動的に型指定されるため、パフォーマンスの点で大きなデメリットがあります(より多くのボクシングが期待されます)が、非同期エージェント間での高速メッセージパッシングをサポートするためにゼロから構築されているため、同等のF#よりもはるかに高速になる可能性があります。ただし、これを裏付けるベンチマーク結果はありません。これは単なる期待です。

余談ですが、ErlangとF#はどちらも小さなコミュニティを持つ比較的フリンジ言語であり、ターゲット市場が異なるため、両方に精通している人はまれです。私がほぼ適格だと思う唯一の人物はジェスパー・ルイス・アンデルセンですが、彼がどれだけF#をやったかはわかりません。


4

Joe Armstrongによるこの投稿を読む必要があります:http : //erlang.org/pipermail/erlang-questions/2012-February/064277.html

短いのは、Erlangが高速になるように設計されていないことです!多くの場合、かなり高速ですが、これはフォールトトレランスや安定性などの問題に続発しています。

真実は、ErlangとF#の両方が素晴らしい言語であり、F#を簡単に見てきただけで、Erlang:Erlang使用したWebアプリケーションの構築に関する本を書いたので、作業が楽しい言語であると言えます。

また、今後6〜9か月以内に出版される関数型言語の本のブームがあるように見えることも指摘しておきます。Erlangで少なくとも4つ(私のものを含む)、Haskellで1つ、OCaml、Clojure、F#でタイトルを知っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.