Stroustrup behauptet, dass Cfront, der erste C ++ - Compiler, in C ++ geschrieben wurde ( Stroustrup FAQ ).
Wie ist es jedoch überhaupt möglich, dass der erste C ++ - Compiler in C ++ geschrieben wird?
Der Code, aus dem der Compiler besteht, muss ebenfalls kompiliert werden, sodass der erste C ++ - Compiler nicht in C ++ geschrieben werden konnte, oder?
Antworten:
Der Schlüssel ist hier richtig:
Die erste Version von Cfront wurde also nicht in C ++, sondern in der Zwischensprache geschrieben. Die Möglichkeit, C-Compiler und Präprozessoren direkt in C zu erstellen, führte zu vielen Neuerungen (und massiven Sicherheitslücken ) in C. Sie schreiben also Ihren neuen Präprozessor, der Ihren Code "C mit Klassen" in direktes C umwandelt (weil direktes C dies kann) irgendetwas) und dann schreiben Sie mit "C with Classes" einen C ++ - Compiler (nicht, dass dies in C nicht möglich wäre, es würde nur eine Weile dauern) und dann schreiben Sie mit diesem C ++ - Compiler einen effizienteren / vollständigeren Compiler C ++. Verstanden?
quelle
Es wurde bootstrapped. Sobald eine C ++ - Funktion zu cfront hinzugefügt wurde, kann cfront diese Funktion auch ab diesem Zeitpunkt verwenden (jedoch nicht, um genau diese Funktion zu implementieren). Dies funktionierte, weil cfront C ++ - Code in C-Code konvertieren konnte. Wenn also eine neue Plattform herauskommt, können Sie cfront auf einer anderen Plattform verwenden, um cfront von C ++ nach C zu konvertieren, und dann den C-Compiler der neuen Plattform verwenden, um die Kompilierung von C nach Objektcode abzuschließen.
quelle
Ich denke, BS beantwortet diese Frage:
Zuerst erstellte er etwas, das er "C mit Klassen" nannte und das von einem einfachen Präprozessor in C implementiert wurde. Es war im Grunde C ++, aber der Präprozessor überprüfte nur wenig oder gar nicht. Er benutzte das dann, um Cfront zu schreiben, die mächtigere Version des Übersetzers von C ++ in C, komplett mit Typprüfung, Symboltabellen usw.
quelle
Ich werde diese Antwort hinzufügen, da keine Antwort diesen Aspekt behandelt.
Sie benötigen technisch keine Software, um Code zu kompilieren. Solange Sie über die erforderlichen Compiler-Spezifikationen verfügen, können Sie die eigentliche Kompilierung manuell durchführen. So wurde nicht der erste C ++ - Compiler kompiliert. Ich sage nur, dass es möglich ist.
Vergleichen Sie mit Assemblersprache. Als sie in den frühen Tagen verwendet wurden, gab es keine Assembler-Software, die den Assembler-Code in Maschinencode umwandelte. Es wurde von Hand gemacht, aber die Assemblersprache gab den Programmierern einen besseren Überblick.
quelle