web-dev-qa-db-ja.com

F#パフォーマンスとErlangパフォーマンスの比較、ErlangのVMの方が速いという証拠はありますか?

私は関数型プログラミングの学習に時間を費やしてきましたが、チュートリアルや例に手を出すのではなく、プロジェクトを書き始めたいところにたどり着きました。

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

F#はLinux(Mono)で実行できるため、要件は満たされますが、インターネットを見回していると、F#とErlangの比較を見つけることができません。今のところ、私はErlangに最も傾倒しているという理由だけでアーランに傾いていますが、2つのシステムの間に実際にパフォーマンスの違いがあるかどうか知りたいです。

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

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

質問した内容がうまくいかなかった場合は、確認を依頼してください。

19
afuzzyllama

「実行可能」とはどういう意味ですか? 「最も多くのプレスを持っている」ことは、必ずしも言語を選択する最良の方法ではありません。

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

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

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

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

21
Robert Harvey

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

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

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

余談ですが、ErlangとF#はどちらもコミュニティが小さい比較的周辺の言語であり、ターゲット市場が異なるため、両方に精通している人はまれです。ほぼ適格だと私が考えることができる唯一の人は Jesper Louis Andersen ですが、彼がどれほどのF#を行ったかはわかりません。

7
Jon Harrop

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#でタイトルを知っています。

5
Zachary K