Zwischencode


Zwischencode

Ein Zwischencode ist der Code, der im Verlauf eines Übersetzungsprozesses auf einer Abstraktionsebene zwischen der höheren Ausgangssprache und der in der Regel maschinennahen Zielsprache generiert wird. Es handelt sich in erster Linie um einen im Compilerbau etablierten konzeptionellen Zwischenschritt, der nicht immer mit der Erzeugung von Produkten verbunden ist.

Inhaltsverzeichnis

Vorteile

Es kann vorteilhaft sein, nicht direkt Code für den Prozessor des Laufzeitsystems zu erzeugen, sondern zunächst nur Zwischencode für einen idealen (auch virtuell genannten) Prozessor, also eine Hardware, die oft nur durch Software simuliert existiert:

  • zum Beispiel weil man Portabilität anstrebt (siehe Java VM), oder
  • weil der Übersetzer durch diese Aufteilung des Übersetzungsprozesses einfacher wird (siehe p-Code), oder
  • weil man allgemeine Optimierungen (effizienzsteigernde Codetransformationen) bereits auf dem Zwischencode vornehmen kann, oder
  • weil der Zielprozessor noch nicht bequem genug zu programmieren ist, z. B. weil man gerne Gleitkommabefehle hätte, der Prozessor aber keine FPU hat - ein weiterer Übersetzungsschritt fügt dann Code ein, der diese Befehle mit den vorhandenen Ganzzahlbefehlen simuliert

Static Single Assignment

Eine spezielle Klasse von Zwischencode ist die Static-Single-Assignment-Darstellung (auch Static Single Assignment Form, abgekürzt: SSA). Sie zeichnet sich dadurch aus, dass im Zwischencode jeder Variablen statisch nur einmal zugewiesen wird. Dadurch werden Datenabhängigkeiten zwischen Befehlen explizit dargestellt, was für viele Optimierungen von Vorteil ist. Die Quellprogramme vieler Programmiersprachen lassen sich ohne größeren Aufwand in eine SSA-Darstellung transformieren. Viele moderne Compiler – darunter der GNU C Compiler – verwenden daher SSA-basierten Zwischencode.

Geschichtliches

Martin Richards entwickelte in den späten 60er Jahren für seine Programmiersprache BCPL, den Vorläufer von C und C++, einen Zwischencode namens O-Code (O für Objektcode), der den eigentlichen Compiler maschinenunabhängig machte. Dies ermöglichte die leichte Portierung dieses Compilers auf unterschiedliche Prozessoren. Der O-Code konnte dann interpretiert oder in maschinenspezifischen Code übersetzt werden.

Die UCSD Pascal Umgebungen aus den späten 70er Jahren verwendeten p-Code. Der Versuch, vollständig portable Computerprogramme auf Basis eines interpretierten Bytecodes zu ermöglichen, scheiterte jedoch weitgehend aufgrund der fehlenden Geschwindigkeit der damaligen Computersysteme - man konnte und wollte sich zu dieser Zeit Verlangsamung durch die zusätzliche Indirektion nicht leisten.

Siehe auch


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Static Single Assignment — Zwischencode ist Code, der im Verlauf eines Übersetzungsprozesses auf einer Abstraktionsebene zwischen der höheren Ausgangssprache und der in der Regel maschinennahen Zielsprache generiert wird. Es handelt sich in erster Linie um einen im… …   Deutsch Wikipedia

  • Compiler-Front-End — Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm – genannt Quellprogramm – in ein semantisch äquivalentes Programm einer Zielsprache (Zielprogramm) umwandelt.… …   Deutsch Wikipedia

  • Kompilierer — Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm – genannt Quellprogramm – in ein semantisch äquivalentes Programm einer Zielsprache (Zielprogramm) umwandelt.… …   Deutsch Wikipedia

  • Kompiliert — Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm – genannt Quellprogramm – in ein semantisch äquivalentes Programm einer Zielsprache (Zielprogramm) umwandelt.… …   Deutsch Wikipedia

  • Maschinencode-Generator — Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm – genannt Quellprogramm – in ein semantisch äquivalentes Programm einer Zielsprache (Zielprogramm) umwandelt.… …   Deutsch Wikipedia

  • Programmgenerator — Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm – genannt Quellprogramm – in ein semantisch äquivalentes Programm einer Zielsprache (Zielprogramm) umwandelt.… …   Deutsch Wikipedia

  • Transcompiler — Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm – genannt Quellprogramm – in ein semantisch äquivalentes Programm einer Zielsprache (Zielprogramm) umwandelt.… …   Deutsch Wikipedia

  • Transpiler — Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm – genannt Quellprogramm – in ein semantisch äquivalentes Programm einer Zielsprache (Zielprogramm) umwandelt.… …   Deutsch Wikipedia

  • Compiler — Historisches Beispiel anhand von CBASIC Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm (Quelltext/Quellprogramm, meist von einem Programmierer in einer… …   Deutsch Wikipedia

  • .NET-Framework — Basisdaten Entwickler: Microsoft Aktuelle Version …   Deutsch Wikipedia