Generieren alle C ++ Compiler C-Code?

8

Wahrscheinlich eine ziemlich vage und weit verbreitete Frage, aber kompilieren alle C ++ - Compiler den Code zuerst in C, bevor sie sie in Maschinencode kompilieren?

    
TripShock 22.07.2010, 17:22
quelle

5 Antworten

12

Weil C-Compiler fast allgegenwärtig und auf fast jeder Plattform verfügbar sind, durchlaufen viele (kompilierte) Sprachen diese Phase ihrer Entwicklung, um den Prozess zu starten.

In den frühen Phasen der Sprachentwicklung, um zu sehen, ob die Sprache machbar ist, besteht der einfachste Weg, einen funktionierenden Compiler zu finden, darin, einen Compiler zu bauen, der Ihre Sprache in C umwandelt und dann den nativen C-Compiler die eigentliche Binärdatei erstellt. p>

Das Problem dabei ist, dass sprachspezifische Konstrukte verloren gehen und somit potentielle Optimierungsmöglichkeiten verpasst werden können. Daher erhalten die meisten Sprachen in der zweiten Phase ihren eigenen dedizierten Compiler front end , der sprachspezifische Konstrukte versteht und somit Optimierungsstrategien bereitstellen kann diese Konstrukte.

C ++ hat vor zwei Jahrzehnten Phase 1 und Phase 2 durchlaufen. So ist es leicht, ein 'Frontend' eines Compilers zu finden, der C ++ gewidmet ist und ein Zwischenformat erzeugt, das direkt an ein Backed übergeben wird. Aber Sie können immer noch Versionen von C ++ finden, die vor dem Kompilieren in C (als Zwischenformat) übersetzt werden.

    
Martin York 22.07.2010, 18:55
quelle
7

Nein. GCC zum Beispiel geht von C ++ - & gt; Assembler. Sie können dies sehen, indem Sie die Option -S mit g ++ verwenden.

Tatsächlich, jetzt, wo ich darüber nachdenke, glaube ich nicht, dass irgendein moderner Compiler vor ASM zu C geht.

    
Gianni 22.07.2010 17:24
quelle
3

Nein. C ++ - & gt; C wurde nur in den frühesten Phasen der Entwicklung und Entwicklung von C ++ verwendet. Die meisten C ++ - Compiler kompilieren heute direkt zu Assembler- oder Maschinencode. Borland C ++ kompiliert zum Beispiel direkt in Maschinencode.

    
dthorpe 22.07.2010 17:29
quelle
1

Nein. Dies ist ein Mythos , der auf der Tatsache basiert, dass eine sehr frühe Version von Stroustrups Arbeit so umgesetzt wurde. C ++ - Compiler erzeugen Maschinencode fast genau so wie C-Compiler.

Heute ist der einzige mir bekannte C ++ - Compiler, der C-Code erstellt, Comeau . Es kann ein oder zwei mehr für Embedded-Ziele geben, aber es ist im Grunde keine Mainstream-Sache.

    
T.E.D. 22.07.2010 17:48
quelle
-4

Dies ist nicht durch den Standard definiert. Sicherlich ist das Kompilieren zu C-Quelle ein vernünftiger Weg, dies zu tun. Es erfordert nur, dass die Zielplattform einen C-Compiler mit einem vernünftigen Maß an Übereinstimmung hat, so dass es ein sehr portabler Weg ist, Dinge zu tun. Der Nachteil ist die Geschwindigkeit. Wahrscheinlich leidet die Kompilierungsgeschwindigkeit und möglicherweise auch die Ausführungsgeschwindigkeit (aufgrund von vielen Umsetzungen für beispielsweise virtuelle Funktionen, die den Compiler daran hindern, vollständig zu optimieren). Vor nicht allzu langer Zeit gab es eine Firma, die einen sehr netten C ++ Compiler hatte, der genau das tat. Leider erinnere ich mich nicht an den Namen der Firma und ein kurzer Google-Name brachte den Namen nicht zurück. Der Besitzer des Unternehmens war ein aktiver Teilnehmer des ISO C ++ - Komitees und Sie konnten Ihren Code direkt auf der Homepage testen, die auch einige recht ordentliche Ressourcen über C ++ hatte. Edit: Einer meiner Kollegen Poster hat mich nur daran erinnert. Ich habe natürlich über Comeau gesprochen.

    
user3721426 11.06.2014 13:24
quelle

Tags und Links