私は最近、特にHaskellとF#の関数型プログラミングを掘り下げてきました。いくつかのグーグルを回った後、より顕著な関数型言語(Scala、F#など)のベンチマーク比較を見つけることができませんでした。
一部の言語はハイブリッドであるため、必ずしも公平ではないことを知っています(Scalaが思い浮かびます)が、どの操作と全体でどのパフォーマンスが優れているかを知りたいだけです。
CPython
対PyPy
すぐに思い浮かぶ。
私は最近、特にHaskellとF#の関数型プログラミングを掘り下げてきました。いくつかのグーグルを回った後、より顕著な関数型言語(Scala、F#など)のベンチマーク比較を見つけることができませんでした。
一部の言語はハイブリッドであるため、必ずしも公平ではないことを知っています(Scalaが思い浮かびます)が、どの操作と全体でどのパフォーマンスが優れているかを知りたいだけです。
CPython
対PyPy
すぐに思い浮かぶ。
回答:
Great Benchmarks Gameによると、ATSはHaskell、Scala、およびCommon Lispのバリアントの1つを使用して、他のATSよりも高速であり、そのすぐ後ろに速度があります。その後、OcamlとF#はほぼ同じ速度のカテゴリになり、RacketとClojureは遅れています...
ただし、これはほとんど何も意味しません。それはすべて、問題、マシン、コンパイラ、コーディング技術、そして場合によっては平運の問題です。一般的に、Haskellのような直接機械コード化言語は、F#のようなVMコンパイル言語よりも優れており、純粋に解釈された言語よりもはるかに優れています。また、一般的に、静的型付け言語は、静的分析により、実行時ではなくコンパイル時にすべての型操作を計算できるため、動的型付けよりも高速です。繰り返しますが、これらは一般的なルールであり、常に例外があります。「パラダイム」はそれとはほとんど関係ありません。
また、プログラミング言語のパフォーマンスを測定/定量化できないことも指摘しておく必要があります。最善の方法は、特定のプラットフォームで特定の言語を実装し、特定のプログラムを実行してパフォーマンスを測定することです。
したがって、「最速の関数型言語」について尋ねるとき、あなたは言語の現在の実装の最高について本当に求めているものです。
@igouyのコメントは、言語の実装には他のパフォーマンス指標があるという点を指摘しています。たとえば、コンパイル時間。しかし、それはアプリケーションプログラムのランタイムが言語の実装の(間接的な)尺度であり、言語自体の尺度ではないという事実を変えません。
たとえば、Javaを検討してください。クラシック(Java 1.0)Javaの言語機能のみを使用して、シングルスレッドベンチマークを作成するとします。JDK 1.0を使用してコンパイルおよび実行すると、パフォーマンスが低下します(「cos JDK 1.0にはネイティブコードコンパイラがありませんでした」)。JDK 1.1から... JDK 1.7に進むと、次第に良い結果が得られるでしょう。しかし、これはJava 言語の変更によるものではありません...私のベンチマークは同じ言語のサブセットを使用しているためです。むしろ、高速化は、コンパイラ、ランタイムシステム、クラスライブラリの実装の改善によるものです。これらはすべて実装の問題です。
もう1つの点は、これらの実装の違いは、同じ言語に対して非常に重要(たとえば桁違い)になる可能性があることです。したがって、言語Xの最適な実装が言語Yの最適な(または唯一の)実装よりも高速であるという事実は、必ずしも言語自体について多くを語るわけではありません。
実行速度のみで言語を見ている場合、いくつかの主要な点が欠けています。速度は良いことですが、それだけではありません。
Haskellは、非常に堅牢な型システムを使用して、バグがなく堅牢なプログラムを作成します。
Erlangは組み込みの監視システムを使用して、さまざまな種類の障害に直面した場合に非常に高いレベルの信頼性を提供できる障害システムを作成できるようにします。さらに、Erlangは、他の言語では一致しにくいレベルの並行性を提供できます。
実際、現代の実行速度は、ほとんどの場合に考慮すべき項目のリストよりもはるかに低いと考えています。(大規模な数値計算を行っている場合は、速度のためにおそらくfortranを使用したいと思いますが、それ以外は重要ではありません)