並行実行とパフォーマンスに対するFPの利点に関する多くのブログと投稿を読んだ後、最近FPの作業を開始しました。 FPの必要性は、開発中のアプリケーションに大きく影響されています。私のアプリケーションは、タイミングが非常に重要な別のサブシステムへの状態ベースのデータインジェクターです(1秒あたり200万トランザクションに近い)。テストする必要のあるこのようなサブシステムがいくつかあります。 FPを使用して並列処理を行うことを真剣に検討しており、正しいアプローチを取りたいと考えています。SOの多くの投稿では、Scala、Haskell、 JVMサポート。言語の観点からは、結果を達成するのに役立つ限り、どの言語を学んでも構いません。
特定の投稿は、パターンマッチングと言語のシンプルさのためにHaskellを支持しています。JVMベースのFP langは、既存のJavaライブラリの使用に関して大きな利点があります。 JaneStreetは大きなOCAMLサポーターですが、OCAMLの開発者サポートとヘルプフォーラムについては本当に確信がありません。
誰かがそのような大きなデータの処理に取り組んでいるなら、あなたの経験を共有してください。
欲しいですかfastまたは欲しいですかeasy?
速くしたい場合は、正確性を高めるためにFP原則を使用している場合でも、C++を使用する必要があります。タイミングが重要であるため、ソフト(必要に応じてハード)のサポートは本物です)メモリを回復する時間と方法を正確に決定し、そのタスクに費やした時間だけを費やすことができます。
あなたが述べた3つの言語はすべて ほぼ最適に調整されたC++よりも2〜3倍遅い傾向があります であり、それからむしろ伝統的な命令的な方法で使用された場合のみです。それらはすべてガベージコレクションを使用します。これにより、トランザクションに制御されないランダムな遅延が発生します。
さて、それは、これをC++で安全に実行するためのlot作業です。 FPの原則を適用すると、かなり多くの定型文が必要になり(C++ 11でも)、ほとんどのライブラリはデフォルトで変更可能です。(編集:Rust代替案ですが、Rustを十分に詳細に記述することはこの回答の範囲外です。)
たぶんあなたには時間がなく、他の仕様を縮小する余裕があるかもしれません。たとえば、timingではなく、throughputが重要な場合、その後、おそらくScala over Clojure( Computer Languages Benchmark Game を参照) Scalaこの執筆時点ですべてのベンチマークに勝つandはほとんどすべてのケースでコードサイズが小さい(編集:CLBGはこの点に関しては、Webアーカイブでこれらのステートメントをサポートするアーカイブを見つけることができますが)、これに関してはもう役立ちます); OCamlとHaskellは、他の理由で選択する必要があります(同様のベンチマークスコアですが、構文と相互運用性が異なります)。
どのシステムが最高の同時実行性サポートを備えている限り、Haskell、Clojure、およびScalaはすべて問題ありませんが、OCamlは少し不足しています。
これにより、HaskellとScalaにかなり絞り込むことができます。 Javaライブラリ?Scala。Cライブラリを使用する必要がありますか?Haskellを使用する必要があります。どちらも必要ありませんか?次に、どちらを選択するかを選択できます。間違ったものを選択することであなたの人生が非常に難しくなることを過度に心配する必要があります。
私はこれをClojureで実行しましたが、次の理由で非常に効果的でした。
他の言語の経験はあまりありませんが、HaskellとScalaの実際の経験からの印象は:
全体として、これらのいずれかに満足できると思います。それはおそらく、JVMと型システムに対するあなたの見方にどれだけ気を配ることになるでしょう。