ブートストラップ問題

ブートストラップ問題の最新ニュースをまとめて検索!

ブートストラップ問題とは、コンパイラをコンパイル対象のプログラミング言語で作成した際に、そのコンパイラのコンパイルをどうするかという問題を指す。また、そのような実装を行うことをブートストラップ方式あるいはブートストラッピングと呼ぶ。ほら吹き男爵が、自分で自分のブーツの紐(髪の毛とするバージョンもある)を引っ張って底なし沼から脱出したと言うエピソードに由来する。

言語 X のコンパイラを言語 X で書く場合、次のような対処法がある。

  • 言語 X のインタプリタコンパイラを言語 Y で実装する。ニクラウス・ヴィルトは、最初のPascalコンパイラをFORTRANで書いたとされている。
  • X の別のインタプリタかコンパイラが言語 Y で既に書かれて存在している。Schemeの場合がこれに相当する。
  • X のサブセットのコンパイラをまず用意し、その X のサブセットで X のコンパイラを書く。Javaのスーパーセットはこの方式で作成されている。
  • X のコンパイラが既に存在するプラットフォーム上で、別のプラットフォームのオブジェクトコードを生成する X のコンパイラをコンパイルし、クロスコンパイラとする。そのクロスコンパイラでコンパイラをコンパイルすれば、ターゲットのプラットフォーム上で動作するコンパイラが得られる。C言語コンパイラを別のプラットフォームに移植する際にこの方式が採用される。
  • X で書かれたコンパイラのソースを、人間が(最適化なしで)コンパイル(つまり機械語に翻訳)し、それを使って最適化コンパイラをコンパイルする。ドナルド・クヌースは、文芸的プログラミングシステム WEB でこの方式を採用した。

コンパイラをソースコード形式で配布する場合、同時に移植の容易なバイトコード版のコンパイラを提供し、コンパイラ自身のコンパイルができるようにする。

ブートストラップ方式で提供された最初の言語はNELIAC(ALGOLの一種)であった。商用の言語ではPL/Iが最初である。今日では、プログラミング言語の多くはブートストラップ方式で実装される。例えば、BASICC言語FactorHaskellModula-2OberonOCamlPascalScheme などがそうである。

[編集] 関連項目

最終更新 2009年11月12日 (木) 09:05 (日時は個人設定で未設定ならばUTC)。
【ブートストラップ問題】変更履歴

ご利用上の注意