Haskellコードの高速化

Haskellで速いコードを書くためのヒントを無秩序に集積したもの。環境としてはGHCを想定する。私は高速化について詳しい訳ではないが、思い付いたことはなんでもかんでも書くように心がけたので、運が良ければ何か役に立つ情報があるかもしれない。

並列処理のパフォーマンスについてはこの文章では触れない。まったく経験がないので。同じ理由で、浮動小数点数を多用した数値計算コードの効率化と、書き換え規則を多用する高水準の最適化も扱わない。

お願い: 文中に間違いや分かりにくい部分があれば指摘いただけると有難いです。また、他に載せた方が良さそうな最適化テクニックや、その他の改善提案があれば教えてください。掲示板またはメールまたはTwitter(@mkotha)までお願いします。

目次

基本的なこと
遅延評価の計算量見積もりの方法と、GHCの内部に依存しないテクニック集。入門書を読んだけれども、Haskellで効率的なのはどんなコードか想像できない、という人が主な対象。
GHCのこと
GHCの実行モデル、中間言語、重要な自動最適化について。さらにGHC依存の(あるいは特定バージョン依存の)あやしげな経験則と、そもそも理解があやふやな話。

リンク

Performance - HaskellWiki
多岐にわたる高速化の知識集。
GHCマニュアルの高速化ページ(ja)

更新履歴

2014-02-19
節ごとの見出しにname属性を追加。
2011-06-25
-auto-allから特定の定義を除外するためにINLINEを使えることを書いた。-funfolding-use-thresholdに言及した。
2010-12-24
Data.Sequenceをキューとして使えることを書いた。dlistに言及した。(@kazu_yamamotoさんの助言による)
2010-12-24
初版。Haskell Advent Calendar jp 2010の参加記事として書いた