4
なぜHaskell(GHC)はとても速いのですか?
Haskell(GHCコンパイラを使用)は、予想よりもはるかに高速です。正しく使用すると、低レベルの言語に近づくことができます。(Haskellersが行うのが好きなことは、Cの5%以内を試すことです(またはそれを打つこともできますが、GHCはHaskellをCにコンパイルするため、非効率的なCプログラムを使用していることになります)。私の質問は、なぜですか? Haskellは宣言型であり、ラムダ計算に基づいています。マシンアーキテクチャは明らかにチューリングマシンに基づいているため、必須です。実際、Haskellには特定の評価順序さえありません。また、マシンデータタイプを処理する代わりに、代数データタイプを常に作成します。 最も奇妙なのは高次関数です。関数をその場で作成し、それらを使い果たすと、プログラムが遅くなると考えるでしょう。しかし、より高次の関数を使用すると、実際にHaskellが高速になります。実際、Haskellコードを最適化するには、マシンのようにではなく、よりエレガントで抽象的なものにする必要があるようです。Haskellのより高度な機能は、それを改善しなければ、パフォーマンスに影響を与えるようには見えません。 これが不満に聞こえる場合は申し訳ありませんが、ここに私の質問があります。その抽象的な性質と物理マシンとの違いを考慮して、なぜHaskell(GHCでコンパイル)がそれほど高速なのですか? 注:私がCや他の命令型言語がチューリングマシンにいくらか似ている(しかし、HaskellがLambda計算に似ているというわけではない)理由は、命令型言語では有限数の状態(別名行番号)があるためです、およびテープ(RAM)とともに、状態と現在のテープがテープに対して何を行うかを決定します。チューリングマシンからコンピューターへの移行については、Wikipediaのエントリ「チューリングマシンの同等物」を参照してください。