Das nervt mich schon eine Weile. Wie kompilieren sich GCC und g ++?
Ich vermute, dass jede Revision mit einer zuvor erstellten Revision kompiliert wird. Ist das wahr? Und wenn ja, bedeutet dies, dass die ältesten g ++ - und GCC-Versionen in Assembly geschrieben wurden?
c++
c
compiler-construction
user1010005
quelle
quelle
Antworten:
Die älteste Version von GCC wurde mit einem anderen C-Compiler kompiliert, da es beim Schreiben andere gab. Der allererste C-Compiler überhaupt (ca. 1973, IIRC) wurde entweder in der PDP-11- Assembly oder in der vorhergehenden B-Programmiersprache implementiert, aber auf jeden Fall wurde der B-Compiler in Assembly geschrieben.
In ähnlicher Weise wurde der erste C ++ - Compiler (CPre / Cfront , 1979-1983) wahrscheinlich zuerst in C implementiert und dann in C ++ neu geschrieben.Wenn Sie GCC oder einen anderen selbsthostenden Compiler kompilieren, lautet die vollständige Reihenfolge der Erstellung:
Dieser Vorgang wird als Bootstrapping bezeichnet . Es testet die Fähigkeit des Compilers, sich selbst zu kompilieren, und stellt sicher, dass der resultierende Compiler mit allen Optimierungen erstellt wird, die er selbst implementiert.
EDIT : Drew Dormann verweist in den Kommentaren auf Bjarne Stroustrups Bericht über die früheste Implementierung von C ++ . Es wurde in C ++ implementiert, aber von Stroustrup als "Präprozessor" von C ++ nach C übersetzt. Nach seiner Definition kein vollständiger Compiler, aber dennoch wurde C ++ in C gebootet.
quelle
__DATE__
und__TIME__
die sogar zwischen Aufrufen desselben Compilers variieren ) wie GCC, kompiliert mit [GCC kompiliert mit [other]] - wenn nicht, ist das ein Fehler, und Der 3-stufige Bootstrap-Build wurde entwickelt, um dies zu erfassen.