www.wikidata.de-de.nina.az
Ein Zwischencode im weitesten Sinne auch Zwischensprache genannt ist der Code der im Verlauf eines Ubersetzungsprozesses auf einer Abstraktionsebene zwischen der hoheren 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 1 Geschichte 2 Vorteile 3 Static Single Assignment 4 Sprachen 5 Siehe auchGeschichte BearbeitenMartin Richards entwickelte in den spaten 1960er Jahren fur seine Programmiersprache BCPL den Vorlaufer von C und C einen Zwischencode namens O Code O fur Objektcode der den eigentlichen Compiler maschinenunabhangig machte Dies ermoglichte die leichte Portierung dieses Compilers auf unterschiedliche Prozessoren Der O Code konnte dann interpretiert oder in maschinenspezifischen Code ubersetzt werden Die UCSD Pascal Umgebungen aus den spaten 1970er Jahren verwendeten p Code Der Versuch vollstandig portable Computerprogramme auf Basis eines interpretierten Bytecodes zu ermoglichen scheiterte jedoch weitgehend aufgrund der geringen Geschwindigkeit der damaligen Computersysteme man konnte und wollte sich zu dieser Zeit Verlangsamung durch die zusatzliche Indirektion nicht leisten Vorteile BearbeitenEs kann vorteilhaft sein nicht direkt Code fur den Prozessor des Laufzeitsystems zu erzeugen sondern zunachst nur Zwischencode fur einen idealen bzw virtuellen Prozessor der oft nur durch Software simuliert wird Grunde konnen u a sein Portabilitat bzw Plattformunabhangigkeit siehe auch Java VM Vereinfachung des Ubersetzungsprozesses siehe auch p Code allgemeine Optimierungen effizienzsteigernde Codetransformationen konnen bereits auf dem Zwischencode vorgenommen werden der Zielprozessor ist noch nicht bequem genug zu programmieren z B weil man gerne Gleitkommabefehle hatte der Prozessor aber keine FPU besitzt ein weiterer Ubersetzungsschritt fugt dann Code ein der diese Befehle mit den vorhandenen Ganzzahlbefehlen simuliert Static Single Assignment BearbeitenEine spezielle Klasse von Zwischencode ist die Static Single Assignment Darstellung auch Static Single Assignment Form abgekurzt SSA Sie zeichnet sich dadurch aus dass im Zwischencode jeder Variablen nur einmal ein Wert zugewiesen wird Dadurch werden Datenabhangigkeiten zwischen Befehlen explizit dargestellt was fur viele Optimierungen von Vorteil ist Die SSA Darstellung ist im Allgemeinen nur mit Hilfe von Phi Funktionen moglich Die Quellprogramme vieler Programmiersprachen lassen sich ohne grosseren Aufwand in eine SSA Darstellung transformieren Viele moderne Compiler darunter die Compiler der GNU Compiler Collection verwenden daher SSA basierten Zwischencode Beispiel Originalcode y 1 y 2 x y Zwischencode y1 1 y2 2 x1 y2Sprachen BearbeitenObwohl es nicht als Zwischencode gedacht war wurde C als Abstraktion von Assembler und wegen der allgemeinen Verfugbarkeit als De facto Systemsprache von unixartigen Systemen und anderen Betriebssystemen eine populare 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 Framework Compilern benutzt wird bevor er statisch oder dynamisch weiter zu Maschinencode kompiliert wird Die GNU Compiler Collection GCC benutzt intern mehrere Zwischencodes um die Portabilitat und Cross Compilation zu unterstutzen Zu diesen Sprachen gehoren die historische Register Transfer Language RTL das sprachunabhangige Baumformat GENERIC und das SSA basierte GIMPLE Die meisten Zwischencodesprachen wurden fur statisch typisierte Sprachen entwickelt Im Unterschied dazu wurde Parrot zur Unterstutzung der dynamisch typisierten Sprachen Perl und Python entwickelt Siehe auch BearbeitenWarren s Abstract Machine eine virtuelle Maschine fur Prolog Virtualisierung Abgerufen von https de wikipedia org w index php title Zwischencode amp oldid 223308448