Interpretieren Compilieren
Editor Editor
| |
+-------------+ +-------------+
| Quelltext | | Quelltext |
+-------------+ +-------------+
| |
| Precompiler
| |
| +-------------+
| | aufgelöster |
| | Quelltext |
| +-------------+
| | +---------+
| | | |
Interpreter Compiler | Bibliothekar
| | | |
| +-------------+ | +-------------+
| | Objektcode |--+ | Bibliothek |
| +-------------+ +-------------+
| | |
| |-------------------+
| Verbinder
| |
+-------------+ +-------------+
|Maschinencode| |Maschinencode|
+-------------+ +-------------+
| | +-------------+
Programm- Programm- | Dyn. Link- |
ausführung ausführung ------| Bibliothek |
+-------------+
Der Interpreter ermöglicht - bei kleinen Problemen - einen schnelleren
Testzyklus, der Weg über den Compiler führt zu weitaus effektiverem
Maschinencode.
Möglich sind jedoch auch Zwischenstufen.
Ein Beispiel stellen sogenannte Compreter dar:
Für einige Sprachen ist eine Vorverarbeitung des Quelltextes durch
Precompiler typisch: Makroanweisungen werden aufgelöst, eine bedingte
Compilation wird möglich. Dies wird z.B. standardmäßig von
C und C++ genutzt.
Bei anderen Sprachen (z.B. Pascal) sind Möglichkeiten zur Precompilierung
abhängig vom jeweiligen Programmiersystem und liegen meist deutlich unter
denen in C.
Mitunter erfolgt die Compilierung über den Zwischenschritt der Übersetzung in eine andere ("reale") Programmiersprache:
Objektcode läßt sich kennzeichnen als (noch) nicht ausführbarer Maschinencode (binär codierte Maschinenbefehle):
Typischerweise besitzen alle Programmeinheiten unterschiedliche relative
Adressen.
Bei Speicherplatzmangel können unter Umständen sogenannte
Überlagerungsstrukturen (overlays) aufgebaut werden (oft in DOS-Systemen
verfügbar):
Verschiedene Programmeinheiten besitzen dann die gleichen relativen
Adressen, d.h. nur eine von ihnen ist jeweils im Hauptspeicher geladen.
Der Programmverbinder verarbeitet als Eingabe eine oder mehrere
Objektcodedateien sowie Objektcodebibliotheken. Erforderliche Bibliotheken
sind die Laufzeitbibliotheken des Sprachsystems und gegebenenfalls
anwendungsbezogene private Biblotheken.
Die Laufzeitbibliotheken enthalten die sogenannten Systemprozeduren
(Ein-/Ausgabeprozeduren, mathematische Standardfunktionen, usw.) der
Programmiersprache.
Zur Ausführung wird das Programm in den Hauptspeicher geladen. Die
relativen Adressen werden dabei durch absolute Adressen ersetzt, in dem das
Programm eine Startadresse erhält. Je nach Betriebssystem ist diese
Startadresse entweder bis zum Ende der Programmausführung fest (z.B. DOS)
oder kann im Bedarfsfall verändert werden (z.B. Windows, UNIX).
Nichtaufgelöste externe Referenzen können unter bestimmten
Voraussetzungen zur Laufzeit abgedeckt werden. Dies geschieht z.B. unter
Windows mit Hilfe von sogenannten DLL's (Dynamic Link Library).
Pascal-Systeme arbeiten typischerweise mit einem Compiler. Das folgende Schema gibt für die Pascal-Systeme XLP (XL Pascal, Unix) und MSP (Microsoft Pascal, DOS) an, welche Programme und Dateien bei der Erstellung eines lauffähigen Programms eine Rolle spielen (können).
XLP MSP
--- ---
vi Editor edit
|
+-------------+
pgm.pas | Quelltext | pgm.pas
+-------------+
|
xlp Compiler pl
|
+-------------+
pgm.o | Objektcode |--+ pgm.obj
+-------------+ |
| | lib
ar | Bibliothekar
| |
| +-------------+
##.a | | Bibliothek | ##.lib
| +-------------+
| |
(ld) Programmverbinder
| | (link)
+-------------+ |
pgm |Maschinencode|--+ pgm.exe
+-------------+
| +-------------+
Programm | Dyn. Link- | ##.dll
ausführung ------| Bibliothek |
+-------------+
Tendenzen
Im Zusammenhang mit der zunehmenden Vernetzung der Rechentechnik in heterogenen
Netzen gibt es Überlegungen,
Code zu erzeugen, der über Netz ausgetauscht und dann ohne weitere
Maßnahmen direkt auf der jeweiligen Maschine ausgeführt werden
kann.
Der Code kann dann nicht direkt ausgeführt werden, sondern wird durch eine
Ablaufumgebung interpretiert.
Auf jeder Maschine, die eine solche Ablaufumgebung existiert, kann der Code
unverändert ausgeführt werden. Die notwendigen Anpassungen an das
jeweilige System werden automatisch von der Ablaufumgebung übernommen.
Systeme, die gegenwärtig nach dieser Philosophie arbeiten, sind u.a. Hotjava (Sprache Java, C++ ähnlich) und Oberon/F (Oberon-2, Pascal-ähnlich).
Siehe auch: