Numeric Haskell Repa Tutorial Wikiには、(文脈のために) 次のような一節があります。
10.1 Fusion と、それが必要な理由
Repa は、高速なコードを実現するために配列融合に大きく依存しています。フュージョンは、GHC がプログラムをコンパイルするときに実行するインライン化とコード変換の組み合わせの凝った名前です。フュージョン プロセスは、Repa ライブラリで定義された配列充填ループを、独自のモジュールで記述した「ワーカー」関数とマージします。融合プロセスが失敗した場合、結果のプログラムは必要以上に遅くなり、多くの場合、単純な Haskell リストを使用した同等のプログラムよりも 10 倍遅くなります。一方、フュージョンが機能する場合、結果として得られるコードは、同等にきれいに記述された C プログラムと同じくらい高速に実行されます。何が起こっているのかを理解すれば、フュージョンを機能させるのは難しくありません。
私が理解していない部分はこれです:
「融合プロセスが失敗した場合、結果のプログラムは必要以上に遅くなり、多くの場合、単純な Haskell リストを使用した同等のプログラムよりも 10 倍遅くなります。」
ストリーム フュージョンが失敗した場合に実行が遅くなる理由は理解できますが、なぜリストよりも実行が遅くなるのでしょうか?
ありがとう!