INLINABLE
ここにリンクされているに関する以前の質問に対して Simon Marlow が行った回答を改善することを期待して、この質問をしています。
関数に INLINABLE プラグマを使用しない理由はありますか?
これは、多くのライブラリ作成者にとって最も重要な重要な質問に Simon Marlow が答えていないことを除いて、その質問のほぼ重複であることを認識していますINLINABLE
。
私が知る限り、唯一の欠点は次のとおりです。
コンパイル時間が遅い
より大きなインターフェイス ファイル (つまり
*.hi
)
しかし、私が本当に知りたいのは、INLINABLE
プラグマを追加した結果、コードの実行速度が低下するかどうかです。言い換えれば、INLINABLE
プラグマによって GHC が最適化されていない最適化を選択する可能性はありますか?
私が尋ねる理由は、私を含め、多くのライブラリ作成者がインターフェイス ファイルのサイズを気にせず、INLINABLE
プラグマを追加するときにコンパイルの大幅な速度低下が見られないためです。そうするのに費用はかからないようです。
逆に、それらを除外することのコストは、モジュールが非常に大きくなるghc
と、スペースを節約するためにインターフェイス ファイルからいくつかの関数を選択的に省略し始めることです。どの機能を省略しますか。
個人的には、アノテーションの結果として関数の実行が遅くなるのを目撃したことはありませんINLINABLE
が、それは完全に運のせいかもしれません。速度が低下する場合がある場合はINLINABLE
、コンパイラ プラグマのすべての順列を退屈にベンチマークするのではなく、いつプラグマを追加するかについてより適切に推論できるように、その理由を知りたいと思います。