Compiler vs. Interpreter: Unterschied erklärt
Kurzantwort
Ein Computer versteht nur Maschinencode aus Nullen und Einsen, kein für Menschen lesbares Programm. Ein Compiler übersetzt den gesamten Quellcode vorab in ein ausführbares Programm – schnell in der Ausführung, aber unflexibel. Ein Interpreter übersetzt den Code Zeile für Zeile während der Ausführung – flexibler, aber langsamer. Viele moderne Sprachen kombinieren beide Ansätze.
Teil des Lernpfads Programmieren und Softwareentwicklung · Schritt 4 von 18
Du schreibst Programmcode in einer für Menschen lesbaren Sprache – aber der Computer versteht davon kein Wort. Irgendjemand muss übersetzen. Ob das ein Compiler oder ein Interpreter tut, macht einen großen Unterschied, und die Frage ist ein Prüfungsklassiker.
Warum muss Code überhaupt übersetzt werden?
Ein Prozessor versteht nur Maschinencode – nackte Befehle aus Nullen und Einsen. Der Quellcode, den du schreibst (if, while, alter = 18), ist für Menschen gemacht, nicht für die Hardware. Zwischen beidem muss übersetzt werden.
Was macht ein Compiler?
Ein Compiler übersetzt den kompletten Quellcode auf einmal, bevor das Programm läuft. Das Ergebnis ist eine fertige, ausführbare Datei, die der Computer direkt starten kann.
Vorteil: Das fertige Programm läuft schnell, weil beim Start nichts mehr übersetzt werden muss. Nachteil: Nach jeder Änderung am Code muss neu übersetzt werden, und das Programm ist an eine bestimmte Plattform gebunden. Klassisch compilierte Sprachen sind C und C++.
Was macht ein Interpreter?
Ein Interpreter übersetzt den Code Zeile für Zeile während der Ausführung. Es entsteht keine eigenständige Programmdatei – der Interpreter muss immer mitlaufen.
Vorteil: flexibel – Code lässt sich sofort testen, ohne vorher zu übersetzen, und läuft überall dort, wo der Interpreter vorhanden ist. Nachteil: langsamer, weil bei jeder Ausführung neu übersetzt wird. Eine typische interpretierte Sprache ist Python.
Der direkte Vergleich
| Merkmal | Compiler | Interpreter |
|---|---|---|
| Übersetzung | alles vorab | Zeile für Zeile beim Ausführen |
| Ergebnis | fertige, ausführbare Datei | keine, Interpreter läuft mit |
| Ausführung | schnell | langsamer |
| Fehler zeigen sich | beim Übersetzen | erst beim Ausführen der Stelle |
| Beispiel | C, C++ | Python |
Und wo liegt Java?
Viele moderne Sprachen kombinieren beide Ansätze. Java etwa wird zuerst in einen plattformunabhängigen Zwischencode (Bytecode) compiliert, den dann zur Laufzeit eine virtuelle Maschine ausführt.
Selbstkontrolle
Selbstkontrolle
Wann zeigt sich bei einem compilierten Programm ein Syntaxfehler im Code?
Häufige Fragen
Was ist der Unterschied zwischen Quellcode und Maschinencode?
Quellcode ist der von Menschen geschriebene Programmtext in einer Programmiersprache. Maschinencode besteht aus den Befehlen, die der Prozessor direkt ausführen kann, dargestellt in Nullen und Einsen. Ein Übersetzer wandelt Quellcode in Maschinencode um, weil die Hardware den Quellcode selbst nicht versteht.
Ist compiliert immer besser als interpretiert?
Nein, beide haben ihren Platz. Compilierte Programme laufen schneller und eignen sich für rechenintensive Anwendungen. Interpretierte Sprachen sind flexibler, schneller zum Ausprobieren und plattformunabhängiger. Welcher Ansatz besser passt, hängt vom Einsatzzweck ab.
Was ist Bytecode?
Bytecode ist eine Zwischenstufe zwischen Quellcode und Maschinencode. Er ist bereits vorübersetzt, aber noch nicht an eine bestimmte Hardware gebunden. Eine virtuelle Maschine führt den Bytecode zur Laufzeit aus. Dadurch läuft dasselbe Programm auf verschiedenen Systemen, ohne neu compiliert zu werden.
Muss ich als Programmierer selbst compilieren?
In compilierten Sprachen stößt du den Übersetzungsvorgang an, meist mit einem einzigen Befehl oder Klick in der Entwicklungsumgebung. Bei interpretierten Sprachen entfällt dieser Schritt, du startest den Code direkt. Moderne Werkzeuge nehmen dir den Vorgang weitgehend ab.
Weiterlesen: Variablen und Datentypen einfach erklärt · Fehlerbehandlung mit Exceptions · OOP-Grundlagen: Klasse, Objekt, Prinzipien · Programmablaufplan (PAP) und Struktogramm
Das Wichtigste in Kürze
- Ein Prozessor versteht nur Maschinencode, nicht den lesbaren Quellcode.
- Ein Compiler übersetzt alles vorab in eine ausführbare Datei – schnelle Ausführung.
- Ein Interpreter übersetzt Zeile für Zeile beim Ausführen – flexibel, aber langsamer.
- Der Compiler meldet Fehler vorab, der Interpreter erst zur Laufzeit.
- Sprachen wie Java kombinieren beides über Bytecode.