Static Single Assignment

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 Übersetzerbau 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):

  • z. B. 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 form — In compiler design, static single assignment form (often abbreviated as SSA form or SSA) is an intermediate representation (IR) in which every variable is assigned exactly once. Existing variables in the original IR are split into versions , new… …   Wikipedia

  • Static single assignment form — En compilation, Static single assignement form (abrégé en SSA) est une représentation intermédiaire (abrégé RI) du code source d un programme dont la particularité est de ne permettre à une variable d être affectée qu une et une seule fois. Les… …   Wikipédia en Français

  • Single assignment — is used to describe a programming language or representation in which one cannot bind a value to a name if a value has already been bound to that name. In other words, a variable is initialized with (i.e. bound to) a value at the time that it is… …   Wikipedia

  • Assignment (computer science) — In computer programming, an assignment statement sets or re sets the value stored in the storage location(s) denoted by a variable name. In most imperative computer programming languages, assignment statements are one of the basic statements.… …   Wikipedia

  • Definite assignment analysis — In computer science, definite assignment analysis is a data flow analysis used by compilers to conservatively ensure that a variable or location is always assigned to before it is used. Contents 1 Motivation 2 Terminology 3 The analysis …   Wikipedia

  • 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 …   Deutsch Wikipedia

  • Use-define chain — A Use Definition Chain (UD Chain) is a data structure that consists of a use, U, of a variable, and all the definitions, D, of that variable that can reach that use without any other intervening definitions. A definition can have many forms, but… …   Wikipedia

  • Compiler optimization — is the process of tuning the output of a compiler to minimize or maximize some attributes of an executable computer program. The most common requirement is to minimize the time taken to execute a program; a less common one is to minimize the… …   Wikipedia

  • Dead code elimination — In compiler theory, dead code elimination is a compiler optimization to remove code which does not affect the program results. Removing such code has two benefits: it shrinks program size, an important consideration in some contexts, and it… …   Wikipedia

  • Continuation-passing style — In functional programming, continuation passing style (CPS) is a style of programming in which control is passed explicitly in the form of a continuation. Gerald Jay Sussman and Guy L. Steele, Jr. coined the phrase in AI Memo 349 (1975), which… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”