Zwischencode - LinkFang.de





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.

Geschichte

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 geringen Geschwindigkeit der damaligen Computersysteme – man konnte und wollte sich zu dieser Zeit Verlangsamung durch die zusätzliche Indirektion nicht leisten.

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 (bzw. virtuellen) Prozessor, der oft nur durch Software simuliert wird. Gründe können u. a. sein:

  • Portabilität bzw. Plattformunabhängigkeit (siehe auch Java VM),
  • Vereinfachung des Übersetzungsprozesses (siehe auch p-Code),
  • allgemeine Optimierungen (effizienzsteigernde Codetransformationen) können bereits auf dem Zwischencode vorgenommen werden,
  • der Zielprozessor noch nicht bequem genug zu programmieren ist, z. B. weil man gerne Gleitkommabefehle hätte, der Prozessor aber keine FPU besitzt – 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 nur ein statischer Wert zugewiesen wird. Dadurch werden Datenabhängigkeiten zwischen Befehlen explizit dargestellt, was für viele Optimierungen von Vorteil ist. Die SSA-Darstellung ist im Allgemeinen nur mit Hilfe von Phi-Funktionen möglich. Die Quellprogramme vieler Programmiersprachen lassen sich ohne größeren Aufwand in eine SSA-Darstellung transformieren. Viele moderne Compiler – darunter die Compiler der GNU Compiler Collection – verwenden daher SSA-basierten Zwischencode.

Sprachen

Obwohl es nicht als Zwischencode gedacht war, wurde C, als Abstraktion von Assembler und wegen der allgemeinen Verfügbarkeit als De-facto-Systemsprache von unixartigen Systemen und anderen Betriebssystemen, eine populäre Zwischensprache: Eiffel, Sather, Esterel, einige Lisp-Dialekte (Lush, Gambit), Haskell (Glasgow Haskell Compiler), Squeak's Smalltalk-subset Slang, Cython, Seed7, Vala und andere benutzen C als Zwischencode. Einige Varianten von C wurden entwickelt, um aus C eine bessere portable Assemblersprache zu machen: C-- und C Intermediate Language.

Microsofts Common Intermediate Language ist ein Zwischencode, der von allen .NET-Compilern benutzt wird, bevor er statisch oder dynamisch weiter zu Maschinencode kompiliert wird.

Die GNU Compiler Collection (GCC) benutzt intern mehrere Zwischencodes, um die Portabilität und Cross-Compilation zu unterstützen. Zu diesen Sprachen gehören

Die meisten Zwischencodesprachen wurden für statisch typisierte Sprachen entwickelt. Im Unterschied dazu wurde Parrot zur Unterstützung der dynamisch typisierten Sprachen Perl und Python entwickelt.

Siehe auch


Kategorien: Compilerbau

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Zwischencode (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.