Compiler vs. Interpreter vs. JIT: Unterschiede erklärt
Quellcode lässt sich auf drei Hauptwegen ausführen. Ein Compiler (Ahead-of-Time, AOT) übersetzt das gesamte Programm in Maschinencode, bevor es läuft. Ein Interpreter liest und führt das Programm während des Ablaufs aus, ohne eine separate Maschinencode-Datei zu erzeugen. Ein Just-in-Time-Compiler (JIT) beginnt mit dem Interpretieren und kompiliert dann häufig genutzte Teile zur Laufzeit in Maschinencode. Viele Sprachen mischen diese Ansätze.
| Aspekt | Compiler (AOT) | Interpreter | JIT-Compiler |
|---|---|---|---|
| Zeitpunkt der Übersetzung | Vor der Ausführung: Das ganze Programm wird zu Maschinencode | Während der Ausführung: Das Programm wird Schritt für Schritt gelesen und ausgeführt | Während der Ausführung: Häufig genutzter Code wird in Maschinencode kompiliert |
| Start | Schneller Start (aber vorher ist ein Build-Schritt nötig) | Schneller Start, ohne Build-Schritt | Anfangs langsamer, bis der Code aufgewärmt ist |
| Ausführungsgeschwindigkeit | Am schnellsten und am besten vorhersagbar | Am langsamsten, oft um ein Vielfaches langsamer als kompilierter Code | Nach dem Aufwärmen nahe an kompilierter Geschwindigkeit, durch Laufzeitinformationen manchmal schneller |
| Portabilität | Eine Binärdatei pro Plattform | Portabel: läuft überall, wo es den Interpreter gibt | Portabler Bytecode, mit plattformspezifischer Laufzeitumgebung |
| Fehlererkennung | Viele Fehler werden zur Kompilierzeit gefunden | Fehler treten auf, wenn die fehlerhafte Zeile ausgeführt wird | Hängt von der Sprache ab |
| Speicherbedarf | Geringer Laufzeit-Overhead | Der Interpreter selbst bleibt im Speicher | Zusätzlicher Speicher für den Compiler und den Cache für kompilierten Code |
| Entwicklungszyklus | Bearbeiten, bauen, ausführen | Bearbeiten und sofort ausführen | Meist bearbeiten und ausführen, oder zu Bytecode bauen |
| Beispielsprachen | C, C++, Rust, Go | Klassisches Python (CPython), Ruby, Shell-Skripte | Java (HotSpot), JavaScript (V8), C# (.NET), PyPy |
Die Zahlenangaben sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.