これはしばらくの間私を悩ませてきました。 GCCとg ++はどのようにコンパイルしますか?
私はすべてのリビジョンが以前にビルドされたリビジョンでコンパイルされると推測しています。これは本当ですか?もしそうなら、それは最も古いg ++およびGCCバージョンがアセンブリで書かれたことを意味しますか?
GCCの最も古いバージョンは、別のCコンパイラを使用してコンパイルされました。これは、作成時に他のCコンパイラが存在したためです。史上初のCコンパイラ(ca. 1973、IIRC)は、 PDP-11 Assembly、またはそれに先行するBプログラミング言語のいずれかで実装されましたが、いずれの場合もBコンパイラはAssemblyで作成されました。 同様に、史上初のC++コンパイラ(CPre/ Cfront 、1979-1983)はおそらくCで最初に実装され、その後C++で書き直されました。
GCCまたはその他のセルフホスティングコンパイラをコンパイルする場合、ビルドの完全な順序は次のとおりです。
このプロセスは bootstrapping と呼ばれます。コンパイラ自体のコンパイル機能をテストし、結果のコンパイラが、それ自体が実装するすべての最適化でビルドされることを確認します。
[〜#〜] edit [〜#〜]:コメントで、ドリュー・ドーマンは 初期の実装のBjarne Stroustrupの説明を指していますC++の 。 C++で実装されましたが、Stroustrupが「プリプロセッサ」と呼ぶものによってC++からCに変換されました。彼の定義では完全なコンパイラではありませんが、それでもC++はCでブートストラップされていました。