Interpretiert versus Kompiliert

Di, 26. Oktober 2021, Ralf Hersel

Jedes Programm besteht aus einer Reihe von Anweisungen, egal ob es darum geht, zwei Zahlen zu addieren oder eine Anfrage über das Internet zu senden. Compiler und Interpreter wandeln menschenlesbaren Code in computerlesbaren Maschinencode um. Bei einer kompilierten Sprache übersetzt die Zielmaschine das Programm direkt. Bei einer interpretierten Sprache wird der Quellcode nicht direkt von der Zielmaschine übersetzt. Stattdessen liest ein anderes Programm, der sogenannte Interpreter, den Code und führt ihn aus.

Hummus, interpretieren oder kompilieren?

Verdeutlichen kann man die Unterschiede anhand eines Kochrezeptes. Stellt euch vor, ihr habt ein Hummus-Rezept, das nachgekocht werden soll, aber es ist auf Altgriechisch geschrieben. Es gibt zwei Möglichkeiten, wie man als Nicht-Altgriechisch-Sprecher der Anleitung folgen kann:

Die erste ist, dass jemand das Rezept bereits für dich ins Deutsche übersetzt hat. Du (und alle anderen, die Deutsch können) könnten die deutsche Version des Rezepts lesen und Hummus zubereiten. Betrachte dieses übersetzte Rezept als die kompilierte Version. Die zweite Möglichkeit besteht darin, einen Freund zu haben, der Altgriechisch kann. Wenn du bereit bist, Hummus zu machen, setzt sich dein Freund neben dich und übersetzt das Rezept Zeile für Zeile ins Deutsche, während du arbeitest. In diesem Fall ist dein Freund der Dolmetscher für die interpretierte Version des Rezepts.

Kompilierte Sprachen

Kompilierte Sprachen werden direkt in Maschinencode umgewandelt, den der Prozessor ausführen kann. Daher lassen sie sich in der Regel schneller und effizienter ausführen als interpretierte Sprachen. Sie geben dem Entwickler auch mehr Kontrolle über Hardwareaspekte, wie Speicherverwaltung und CPU-Nutzung.

Kompilierte Sprachen benötigen einen "Build"-Schritt - sie müssen zuerst manuell kompiliert werden. Jedes Mal, wenn man eine Änderung vornehmen möchte, muss das Programm "neu erstellt" werden. In unserem Hummus-Beispiel wird die gesamte Übersetzung geschrieben, bevor sie zu dir gelangt. Wenn der ursprüngliche Autor beschliesst, eine andere Art von Olivenöl zu verwenden, müsste das gesamte Rezept erneut übersetzt und an dich geschickt werden.

Beispiele für rein kompilierte Sprachen sind C, C++, Erlang, Haskell, Rust und Go.

Interpretierte Sprachen

Interpreter gehen ein Programm Zeile für Zeile durch und führen jeden Befehl aus. Wenn der Autor also beschliesst, eine andere Sorte Olivenöl zu verwenden, kann er das alte herauskratzen und das neue hinzufügen. Dein Freund, der Übersetzer, kann dir dann diese Änderung mitteilen, sobald sie eintritt.

Früher waren interpretierte Sprachen wesentlich langsamer als kompilierte Sprachen. Doch mit der Entwicklung der Just-in-Time-Kompilierung wird dieser Unterschied immer geringer. Beispiele für gängige interpretierte Sprachen sind PHP, Ruby, Python und JavaScript.

Die meisten Programmiersprachen können sowohl kompilierte als auch interpretierte Implementierungen haben - die Sprache selbst ist nicht unbedingt kompiliert oder interpretiert. Der Einfachheit halber werden sie jedoch in der Regel als solche bezeichnet.

Python zum Beispiel kann entweder als kompiliertes Programm oder als interpretierte Sprache im interaktiven Modus ausgeführt werden. Die meisten Befehlszeilentools, CLIs und Shells hingegen können theoretisch als interpretierte Sprachen eingestuft werden.

Vorteile von kompilierten Sprachen

Programme, die in nativen Maschinencode kompiliert werden, sind in der Regel schneller als interpretierter Code. Dies liegt daran, dass die Übersetzung des Codes zur Laufzeit den Overhead erhöht und das Programm insgesamt langsamer machen kann.

Nachteile von kompilierten Sprachen

Die wichtigsten Nachteile sind: Zusätzlicher Zeitaufwand für den Abschluss des gesamten Kompilierungsschritts vor dem Testen und Plattformabhängigkeit des erzeugten Binärcodes.

Vorteile von interpretierten Sprachen

Interpretierte Sprachen sind in der Regel flexibler und bieten oft Funktionen wie dynamische Typisierung und geringere Programmgrösse. Da Interpreter den Quellprogrammcode selbst ausführen, ist der Code selbst plattformunabhängig.

Nachteile von interpretierten Sprachen

Der grösste Nachteil ist die typische Ausführungsgeschwindigkeit im Vergleich zu kompilierten Sprachen.

Quelle: https://www.freecodecamp.org/news/compiled-versus-interpreted-languages/