Vorteile von Stack-basierten Bytecodes oder Unendlich-Register-Rechnern

compiler-construction expression-trees intermediate-code

Frage

Compiler wählen häufig Zwischendarstellungen (Intermediate Representations, IRs) aus, die entweder stapelbasiert sind oder ein unendliches Register. Was sind die Vorteile dieser Überexpressionsbäume?

Beliebte Antwort

Ausdrucksbäume funktionieren für Ausdrücke, sind aber nicht für die Modellierung des gesamten Programms geeignet. Insbesondere ist eine gute Darstellung eines Programms wirklich ein Graph (von Operationen und Aktionen), der durch Kontroll- und Datenflüsse verbunden ist. In der Regel wird über "Tripel" gesprochen, die genau eine solche Grafik bilden.

Stack-Maschinencode ist für das Frontend einfach zu erzeugen, aber schwieriger für den eventuellen Registerzuweisungsprozess, der zum Erzeugen von echtem Code benötigt wird, da er eine Menge von temporären Positionen ("der Stapel") hat, die nichts mit der Zielarchitektur zu tun haben , und machen die Datenflüsse unbequem zu verarbeiten. ("Welcher Code verwendet das Ergebnis dieser Ergänzung?").

Registermaschinen sind ein wenig schwieriger, Code für zu erzeugen, aber neigen, den Datenfluss beizubehalten, indem sie diese unbegrenzten Register als im Wesentlichen Datenflussdrähte verwenden. Dieser Datenfluss und die Möglichkeit, ihn leicht realen Registern zuzuordnen (es gibt eine Standard-Registerzuweisung "durch Graphenfärbung"), macht es relativ einfach, guten Code zu erzeugen.

Wenn Sie den Code der virtuellen Maschine direkt daraus generieren, erhalten Sie unterschiedliche Leistungsmerkmale. Im Wesentlichen neigen Stapelmaschinen dazu, kleinere Code-Fußabdrücke zu erhalten. Unbegrenzte Registermaschinen neigen dazu, eine schnelle interpretierende Ausführung zu erhalten. Googles Dalvik unterscheidet sich genau deshalb von der JVM. (Vielleicht wollten sie auch nicht von Sun / Oracle über Klassendateiformate verklagt werden.)

Ich schlage folgendes Dokument vor: Virtual Machine Showdown: Stack versus Registers . (PS: alles mit Anton Ertl als Autor ist eine interessante Lektüre).



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow