タイトルは私の質問をほぼ要約しています。Haskellの型クラスに関連する実行時のペナルティはありますか、それとも実行時の影響がまったくないものの1つ(ファントム型など)ですか?
質問する
821 次
1 に答える
17
型クラスを要求することは、型クラスのメンバーをデータ構造として含む関数に追加の引数を渡すのと同じです。これは、GHCで脱糖される舞台裏であるためです。
とは言うものの、GHCは、型クラスを使用するコードをインライン化して特殊化するのに非常に優れており、-O2を使用すると、その大部分が消えてしまいますが、そのような最適化レベルがなくても、引数を渡すのはかなり安価です。 。
したがって、オーバーヘッドはファントムタイプやニュータイプ以上のものですが、それほど高くはありません。
余談ですが、他のコンパイラのオーバーヘッドは異なる場合があります。たとえば、JHCは、限定された形式の依存型を使用して型コンストラクターのケース分析を効果的に実行するため、JHCで作業するときの制約の数ではなく、制約のある型変数の数に対して支払います。
于 2012-04-13T22:16:36.473 に答える