出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/02/21 14:24 UTC 版)
|
この項目「Glasgow Haskell Compiler」は翻訳されたばかりのものです。不自然あるいは曖昧な表現などが含まれる可能性があり、このままでは読みづらいかもしれません。(原文:英語版 "Glasgow Haskell Compiler" 2018年11月6日 (火) 04:45(UTC))
修正、加筆に協力し、現在の表現をより自然な表現にして下さる方を求めています。ノートページや履歴も参照してください。(2018年11月) |
| 作者 | Kevin Hammond |
|---|---|
| 開発元 | The Glasgow Haskell Team[1] |
| 初版 | 1992年12月[2] |
| 最新版 | 9.8.1[3] |
| リポジトリ | |
| プログラミング 言語 |
|
| 対応OS | クロスプラットフォーム |
| プラットフォーム | |
| 対応言語 | 英語 |
| 種別 | コンパイラ |
| ライセンス | 修正BSDライセンス |
| 公式サイト | www |
Glasgow Haskell Compiler (グラスゴー・ハスケル・コンパイラ)[4] またはThe Glorious Glasgow Haskell Compilation System (ザ・グロリアス・グラスゴー・ハスケル・コンピレーション・システム)[5] は、関数型プログラミング言語 Haskellのオープンソースコンパイラである。一般的にGHCの略称で知られている。Haskellのコードの作成とテストのためのクロスプラットフォーム環境を提供し、効率的な実行ファイルを生成するための多数の言語拡張・ライブラリ・最適化に対応している。GHCは最も一般的に利用されているHaskellのコンパイラである[6]。主要開発者はサイモン・ペイトン・ジョーンズとサイモン・マーロウである。
GHCの開発は、1989年にグラスゴー大学のKevin Hammondによって開始された。プロトタイプはLazy MLによって書かれていた。この年の後半にパーサを除いた部分が、Cordelia HallとWill PartainとSimon Peyton JonesによってHaskellで完全に書き直された。最初のベータ版は1991年4月1日にリリースされ、その次のリリースでは、厳密なアナライザーとモナドなどのより良い言語拡張、変更可能な配列 (MArray)、ボックス化されていないデータ型、ソフトウェアトランザクショナルメモリやデータ並列性などの並列プログラミングモデル、プロファイラーが追加された[2]。
Simon Peyton JonesとSimon Marlowは後に、ケンブリッジのマイクロソフトリサーチに移籍し、そこでGHCの開発を行っている。GHCの開発には300人以上が貢献している[1]。2009年以降、サードパーティーのGHCへの貢献には、Industrial Haskell Group (IHG) によって資金提供が行われている[7]。
GHC自体はHaskellによって書かれているが[8]、プログラムの実行に必要なランタイムシステムは、C言語とC--によって書かれている。
字句解析・パーサ・型システムが組み込まれているGHCのフロントエンドは、型推論が完了するまで可能な限りソースコードに関する情報を保存し、ユーザーに明確なエラーメッセージを提供することを目標に設計されている[2]。型検査が完了した後、Core[注釈 1]として知られている非糖衣構文の型付きの中間言語に変換される。最近のCoreは一般化代数的データ型に対応するように拡張され、System FCとして知られているSystem Fの拡張に基づいている[9]。
型指向コンパイルの伝統では、GHCのコンパイラ最適化が実行される単純化 (ミドルエンド) の段階は、一連のCoreのコードのトランスコンパイルによって構成されている。この段階で行われる解析と変換は、需要解析 (正格性解析の一般化)、ユーザー定義の項書き換えの適用 (foldr/build融合を実行するGHCの標準ライブラリに含まれる一連の規則を含む)、展開 (より伝統的なコンパイラでは「インライン展開」と呼ばれているもの)、ボックス化を解除できる関数の引数がどれであるかの解析、構築された製品の結果解析、多重定義された関数の部分評価、定数畳み込みやベータ簡約などのより簡単な局所変換である[10]。
GHCのバックエンドは、中間言語 Spineless Tagless G-machine (STG) を介してCoreのコードをC--の内部表現に変換している[11]。C--のコードは以下の3つの中のいずれかの方法によって変換される[12]。
いずれの方法でも最終的に得られた機械語はGHCのランタイムシステムとリンクされ、実行ファイルが生成される。
GHCはHaskell 98とHaskell 2010の両方の言語標準に対応している[13][14]。また、言語標準に対する多くの言語拡張にも対応している。例えば、合成可能メモリトランザクションを可能にするソフトウェアトランザクショナルメモリ (STM) のライブラリである。
Haskellの言語標準には幾つかの拡張が提案されている。これらの言語拡張は言語仕様では記述されていない機能を提供するか、既存の構造を再定義している。これらの言語拡張は全てのHaskell処理系が対応しているわけではない。言語拡張を記述し、将来の言語仕様に含めるものを選択する継続的な努力が行われている[15]。
GHCが対応している言語拡張は以下の通りである[16]。
表現力豊かな静的型付けは、Haskellの主な特徴の1つである。それ故に、言語拡張の作業の多くは型と型クラスに向けたものになっている。
GHCはSystem FCに基づいた拡張型システムに対応している[9]。主な型システムの拡張は以下の通りである。
型クラスに関する拡張は以下の通りである。
GHCはUnix系OS (Linux・FreeBSD・macOSなど) やWindowsなど多くのプラットフォームで動作し[18]、パッケージ管理システムを利用してインストールすることもできる[19]。また、x86やPowerPC、ARMなど多くのCPUで稼動するOS上に移植されている[20]。
ghc --version 出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/20 02:06 UTC 版)
「Haskell」の記事における「Glasgow Haskell Compiler」の解説
The Glasgow Haskell Compiler は異なる複数のアーキテクチャのネイティブコードにコンパイルできるほか、C言語にコンパイルすることもできる。おそらくGHCは最も知られた Haskell コンパイラで、現在のところGHCのみで動く言語拡張が実装されており、かなり便利ないくつかのライブラリはGHCのみで動作する(たとえは OpenGL のバインディングなど)。
※この「Glasgow Haskell Compiler」の解説は、「Haskell」の解説の一部です。
「Glasgow Haskell Compiler」を含む「Haskell」の記事については、「Haskell」の概要を参照ください。