[解決済み] GCCとg++はどのようにブートストラップされるのですか?
2022-04-13 10:45:02
質問
以前から気になっていたことがあります。GCCとg++はどのように自分自身をコンパイルしているのでしょうか?
すべてのリビジョンは、以前にビルドされたリビジョンとコンパイルされるのでしょうね。これは本当でしょうか?もしそうなら、最も古いバージョンのg++とGCCはアセンブリで書かれているということになるのでしょうか?
解決方法は?
GCCの最も古いバージョンは、他のCコンパイラを使ってコンパイルされています。なぜなら、GCCが書かれた当時、他のコンパイラが存在したからです。史上最初のCコンパイラ(1973年頃、IRC)は、以下のどちらかで実装されていました。
PDP-11
アセンブリか、その前のB言語か、いずれにせよBコンパイラはアセンブリで書かれていました。
同様に、史上初のC++コンパイラ(CPre/
Cフロント
1979-1983)は、おそらく最初にC言語で実装され、その後C++で書き直されたのでしょう。
GCCやその他のセルフホスティングコンパイラでコンパイルする場合、ビルドの完全な順序は次のようになります。
- 既存のCコンパイラで新バージョンのGCCをビルドする。
- 新しいバージョンのGCCを、先ほどビルドしたものと一緒に再ビルドします。
- (オプション) 検証のため、手順2を繰り返す。
この処理は ブートストラップ . これは、コンパイラが自分自身をコンパイルする能力をテストし、コンパイラ自身が実装しているすべての最適化でコンパイラがビルドされていることを確認するものです。
EDIT : Drew Dormannがコメントで、Bjarne Stroustrupの記述を指摘しています。 C++の最古の実装 . C++で実装されたが、Stroustrupがプリプロセッサと呼ぶものによってC++からCに変換された。彼の定義では、完全なコンパイラではないが、それでもC++はCでブートストラップされていたのだ。
関連
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] なぜGCCは、速度の代わりにサイズに最適化すると、15-20%速いコードを生成するのですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み】独自の言語でコンパイラを書く