Ich habe mir den Quellcode unter http://referencesource.microsoft.com/ angesehen und es scheint, dass der gesamte Quellcode in C # ist.
Ich habe mir auch den Quellcode für die neue C # -Compilerplattform ( Roslyn ) angesehen, und er ist auch in C #. Wie ist das möglich? Ist der C # -Sprachen-Compiler in C # geschrieben? Oder fehlt mir etwas Offensichtliches? Wenn der C # -Compiler in C # geschrieben ist, wie funktioniert er dann?
c#
compiler-construction
roslyn
CriketerOnSO
quelle
quelle
Antworten:
Der ursprüngliche C # -Compiler wurde nicht in C # geschrieben, sondern in C und C ++. Der neue Roslyn-Compiler wurde in C # geschrieben, aber ursprünglich mit dem alten Compiler kompiliert. Nachdem der neue Compiler fertig war, konnte er seinen eigenen Quellcode kompilieren: Dies wird als Bootstrapping bezeichnet .
quelle
Compiler sind Hilfsprogramme - sie wandeln Programmiersprachentext in Maschinencode um. Wenn die Programmiersprache Software beschreibt, die zufällig ein Compiler ist .....
Compiler können auch Maschinencode für andere Architekturen erstellen. Apple kompiliert beispielsweise iOS mithilfe von Racks mit Intel-basierten Servern. Der Compiler muss den von ihm generierten ARM-Code nicht ausführen, sondern nur auf die Festplatte schreiben.
Compiler 2.0 muss in einer Sprache geschrieben sein, die Compiler 1.0 verarbeiten kann, aber er kann sicherlich Compiler 2.0 mit neueren Funktionen wie Optimierung erstellen. Sie können den Quellcode dann mit Compiler 2.0 neu kompilieren und eine bessere Version von sich selbst erstellen. Auch hier weiß der Compiler nicht, dass er eine andere Version von sich selbst erstellt.
Wenn wir weit genug zurück in den Nebel der Zeit gehen, erreichen wir einen Punkt, an dem wir keinen Compiler haben - die allererste Iteration einer Hochsprache. Dann müssen wir die Stifte und Opcode-Bücher herausholen und den ersten in der Montage schreiben. Wie haben wir den ersten Assembler geschrieben? Direkte Eingabe des Maschinencodes, wahrscheinlich auf gelochtem Papierband, oder Umlegen der Schalter an der Vorderseite.
quelle
Ein Compiler ist nur ein Programm wie jedes andere Programm. Es ist nichts Magisches oder Besonderes daran. Es braucht etwas Eingabe und erzeugt etwas Ausgabe. In diesem speziellen Fall ist die Eingabe zufällig C # und die Ausgabe ist zufällig CIL. Dies unterscheidet sich jedoch nicht von der Eingabe als eine Reihe von Steuererklärungen und der Ausgabe als Bericht.
quelle