第1章 GHCの紹介

目次

1.1. GHCを入手する
1.2. メタ情報: ウェブサイト、メーリングリストなど
1.3. GHCのバグを報告する
1.4. GHCのバージョン番号付け規則
1.5. Release notes for version 7.8.1
1.5.1. Highlights
1.5.2. Full details
1.5.2.1. Language
1.5.2.2. Compiler
1.5.2.3. GHCi
1.5.2.4. Template Haskell
1.5.2.5. Runtime system
1.5.2.6. Build system
1.5.3. Libraries
1.5.3.1. array
1.5.3.2. base
1.5.3.3. bin-package-db
1.5.3.4. binary
1.5.3.5. bytestring
1.5.3.6. Cabal
1.5.3.7. containers
1.5.3.8. deepseq
1.5.3.9. directory
1.5.3.10. filepath
1.5.3.11. ghc-prim
1.5.3.12. haskell98
1.5.3.13. haskell2010
1.5.3.14. hoopl
1.5.3.15. hpc
1.5.3.16. integer-gmp
1.5.3.17. old-locale
1.5.3.18. old-time
1.5.3.19. process
1.5.3.20. template-haskell
1.5.3.21. time
1.5.3.22. unix
1.5.3.23. Win32
1.5.4. Known bugs
1.6. Release notes for version 7.8.2
1.6.1. GHC

これはグラスゴーHaskellコンパイラ(GHC)という、Haskell 98のための対話的・一括処理的なコンパイルシステムの利用の手引きである。

GHCは主に二つの構成要素から成っている。対話的Haskellインタプリタ(GHCiとも呼ばれる。説明は第2章. GHCiを使うにある)と、一括処理コンパイラ(説明は第4章. GHCを使うにある)である。GHCは実際には単一のプログラムであり、走るときのオプションによって、対話的システムを提供したり、一括処理システムを提供したりする。

一括処理コンパイラはGHCiと組み合わせて使うことができる。対話的セッション中にコンパイル済みモジュールをロードすることができ、ロードされたものは解釈実行コードと同じように扱える。実際、GHCiを使うとき、ライブラリコードの大部分はコンパイル済みのものが使われている。この機能のおかげで、二つの方法の利点を両方とも享受することができる。すなわち、ライブラリコードは高速な実行のためにあらかじめコンパイルしておき、同時に、活発に開発されている部分を繰り返しコンパイルするのに掛かる時間を省く、ということができる。

GHCはたくさんの言語拡張をサポートする。例えば、並列実行、外部関数インタフェース、例外など。これに加えて、多引数の型クラス、局所的な全称/存在量化、関数従属、スコープを持つ型変数、明示的な非ボックス化型といった型システムの拡張もある。これらの説明は全て第7章. GHCの言語機能にある。

GHCには総合的な最適化器があり、もしあなたが本気でそのつもり(で、時間に余裕がある)なら、GHCはとても速いコードを出力することができる。一方、デフォルトのオプションは、生成されるコードを最適化するのにあまり熱心にならないようにして、なるべく速くコンパイルを行うというものである。(それでもGHCを「速いコンパイラ」だとは思ってくれないだろうけど 笑)

GHCのプロファイルシステムは、「コスト集約点スタック」をサポートする。これは、Haskellプログラムのプロファイルをコールグラフ状の構造として見るためのものである。より詳しくは、第5章. プロファイルを取るを参照せよ。

GHCにはいくつかのライブラリが付属している。これらのライブラリの説明は別の文書にある。

1.1. GHCを入手する

GHC home pageに行って、「download」のリンクを辿れば、あなたのプラットフォーム用のGHCをダウンロードできる。

別の選択肢として、自分でGHCをビルドしたいなら、GHC Building Guideに行って、どうやってソースを入手してあなたのシステム上でビルドするかを知ればよい。GHCはそれ自体Haskellで書かれているので、ビルドするにしてもGHCをインストールする必要があることに注意。