Glasgow Haskell Compiler

Glasgow Haskell Compiler (グラスゴー・ハスケル・コンパイラ) またはThe Glorious Glasgow Haskell Compilation System (ザ・グロリアス・グラスゴー・ハスケル・コンピレーション・システム) は、関数型プログラミング言語 Haskellのオープンソースコンパイラである。一般的にGHCの略称で知られている。Haskellのコードの作成とテストのためのクロスプラットフォーム環境を提供し、効率的な実行ファイルを生成するための多数の言語拡張・ライブラリ・最適化に対応している。GHCは最も一般的に利用されているHaskellのコンパイラである。主要開発者はサイモン・ペイトン・ジョーンズとサイモン・マーロウである。
歴史.
GHCの開発は、1989年にグラスゴー大学のKevin Hammondによって開始された。プロトタイプはによって書かれていた。この年の後半にパーサを除いた部分が、Cordelia HallとWill PartainとSimon Peyton JonesによってHaskellで完全に書き直された。最初のベータ版は1991年4月1日にリリースされ、その次のリリースでは、厳密なアナライザーとモナドなどのより良い言語拡張、変更可能な配列 (MArray)、ボックス化されていないデータ型、ソフトウェアトランザクショナルメモリやデータ並列性などの並列プログラミングモデル、プロファイラーが追加された。
Simon Peyton JonesとSimon Marlowは後に、ケンブリッジのマイクロソフトリサーチに移籍し、そこでGHCの開発を行っている。GHCの開発には300人以上が貢献している。2009年以降、サードパーティーのGHCへの貢献には、Industrial Haskell Group (IHG) によって資金提供が行われている。
アーキテクチャ.
GHC自体はHaskellによって書かれているが、プログラムの実行に必要なランタイムシステムは、C言語とC--によって書かれている。
字句解析・パーサ・型システムが組み込まれているGHCのフロントエンドは、型推論が完了するまで可能な限りソースコードに関する情報を保存し、ユーザーに明確なエラーメッセージを提供することを目標に設計されている。型検査が完了した後、"Core"として知られている非糖衣構文の型付きの中間言語に変換される。最近のCoreはに対応するように拡張され、"System FC"として知られているSystem Fの拡張に基づいている。
型指向コンパイルの伝統では、GHCのコンパイラ最適化が実行される単純化 (ミドルエンド) の段階は、一連のCoreのコードのトランスコンパイルによって構成されている。この段階で行われる解析と変換は、需要解析 (の一般化)、ユーザー定義の項書き換えの適用 (foldr/buildを実行するGHCの標準ライブラリに含まれる一連の規則を含む)、展開 (より伝統的なコンパイラでは「インライン展開」と呼ばれているもの)、ボックス化を解除できる関数の引数がどれであるかの解析、、多重定義された関数の部分評価、定数畳み込みやベータ簡約などのより簡単な局所変換である。
GHCのバックエンドは、中間言語 "Spineless Tagless G-machine" (STG) を介してCoreのコードをC--の内部表現に変換している。C--のコードは以下の3つの中のいずれかの方法によって変換される。
いずれの方法でも最終的に得られた機械語はGHCのランタイムシステムとリンクされ、実行ファイルが生成される。
言語.
GHCは"Haskell 98"と"Haskell 2010"の両方の言語標準に対応している。また、言語標準に対する多くの言語拡張にも対応している。例えば、合成可能メモリトランザクションを可能にするソフトウェアトランザクショナルメモリ (STM) のライブラリである。
言語拡張.
Haskellの言語標準には幾つかの拡張が提案されている。これらの言語拡張は言語仕様では記述されていない機能を提供するか、既存の構造を再定義している。これらの言語拡張は全てのHaskell処理系が対応しているわけではない。言語拡張を記述し、将来の言語仕様に含めるものを選択する継続的な努力が行われている。
GHCが対応している言語拡張は以下の通りである。
型システムの拡張.
表現力豊かな静的型付けは、Haskellの主な特徴の1つである。それ故に、言語拡張の作業の多くは型と型クラスに向けたものになっている。
GHCはSystem FCに基づいた拡張型システムに対応している。主な型システムの拡張は以下の通りである。
型クラスに関する拡張は以下の通りである。
移植性.
GHCはUnix系OS (Linux・FreeBSD・macOSなど) やWindowsなど多くのプラットフォームで動作し、パッケージ管理システムを利用してインストールすることもできる。また、x86やPowerPC、ARMなど多くのCPUで稼動するOS上に移植されている。