Interpreter
Kurz: Ein Interpreter führt ein Programm direkt aus, indem er den Quelltext (oder einen Zwischencode) Schritt für Schritt liest und die Anweisungen sofort umsetzt – ohne vorher eine eigene ausführbare Datei zu erzeugen.
Genauer: Interpretierte Sprachen wie Python, Ruby, PHP, Bash oder JavaScript erlauben schnelles Ausprobieren in einer REPL (REPL) und sind plattformunabhängig, solange es den Interpreter gibt. Typfehler fallen oft erst beim Ausführen auf, und die Geschwindigkeit liegt meist unter der von kompiliertem Code.
Im Detail
python3 skript.py # Interpreter liest und führt aus
node app.js
bash backup.shWie arbeitet ein Interpreter?
Vereinfacht in einer Schleife: Anweisung lesen, auswerten, Zustand ändern, weiter. Moderne Interpreter übersetzen den Quelltext zuerst in einen kompakten Bytecode (Bytecode) und führen den in einer virtuellen Maschine aus (CPython, Ruby/YARV, Lua). Schnelle JavaScript-Engines wie V8 kombinieren das mit JIT-Compilation.
# Ein winziger Interpreter für Rechenausdrücke in Postfix-Schreibweise
def rechne(ausdruck):
stapel = []
for token in ausdruck.split():
if token in "+-*/":
b, a = stapel.pop(), stapel.pop()
stapel.append({"+": a + b, "-": a - b, "*": a * b, "/": a / b}[token])
else:
stapel.append(float(token))
return stapel.pop()
print(rechne("3 4 + 2 *")) # 14.0Vergleich
| Compiler | Interpreter | |
|---|---|---|
| Übersetzung | vorab, gesamtes Programm | zur Laufzeit, Stück für Stück |
| Start | schnell (Binärdatei) | Interpreter muss laufen |
| Geschwindigkeit | meist höher | meist niedriger |
| Fehler | viele vor dem Start | oft erst beim Ausführen |
Interpreter selbst zu bauen ist eine hervorragende Übung (Beispiele in den Kursen zu Scheme und Racket).
Siehe auch: Compiler, Bytecode, REPL, JIT-Compiler