1. ホーム
  2. compilation

[解決済み] コンパイラはどのようにして自分自身をコンパイルすることができるのですか?

2022-04-21 22:40:51

質問

ウェブサイト上でCoffeeScriptを研究しています http://coffeescript.org/ というテキストがあります。

<ブロッククオート

CoffeeScriptコンパイラは、それ自体がCoffeeScriptで書かれています。

コンパイラはどうやって自分自身をコンパイルできるのか、この文はどういう意味なのか?

どのように解決するのですか?

あるコンパイラの初版は、そのコンパイラに固有のプログラミング言語から機械的に生成することはできない。あなたの混乱は理解できる。言語の機能を増やした後のバージョンのコンパイラ(ソースは新しい言語の最初のバージョンで書き直されたもの)は、最初のコンパイラでビルドすることができます。そしてそのバージョンは次のコンパイラをコンパイルすることができ、その繰り返しとなります。以下はその例である。

  1. 最初の CoffeeScript コンパイラは Ruby で書かれており、バージョン 1 の CoffeeScript が生成されます。
  2. CSコンパイラのソースコードをCoffeeScript 1で書き直した。
  3. オリジナルの CS コンパイラは、新しいコード(CS 1 で書かれた)をコンパイラのバージョン 2 にコンパイルする
  4. コンパイラのソースコードに変更が加えられ、新しい言語機能が追加される
  5. 2番目のCSコンパイラ(CSで記述された最初のコンパイラ)は、改訂された新しいソース・コードをコンパイラのバージョン3にコンパイルする
  6. 各反復のために手順4と5を繰り返す

注:CoffeeScriptのバージョン番号がどのように振られているかは正確にはわかりません。

この処理は、通常 ブートストラップ . ブートストラップ・コンパイラのもう一つの例として rustc のコンパイラです。 Rust言語 .