Interpreter
Der größte Nachteil der Interpretersprachen ist die im Vergleich zu compilierten Programmen deutlich langsamere Ausführungsgeschwindigkeit. Reine Interpreter lesen und analysieren den Quellcode eines Programmes und führen dann die entsprechenden Aktionen durch. Dies ist im Vergleich zu Compilersprachen, bei denen das Programm vor seiner Ausführung in Maschinencode übersetzt wird, der dann vom Prozessor direkt ausgeführt wird, sehr zeitaufwendig. Der Vorteil liegt darin, dass reine Interpreter auf jeder Rechnerarchitektur lauffähig sind wenn der Quellcode des Interpreters (der selbst häufig in C geschrieben ist) dort übersetzt werden kann.
Eine Kompromisslösung ist ein Just-In-Time-Compiler (JIT-Compiler), bei dem das Programm erst zur Laufzeit übersetzt wird, danach wird der übersetzte Code direkt vom Prozessor ausgeführt. Der übersetzte Code wird in der Regel zwischengespeichert, so dass mehrfach durchlaufene Programmteile nur einmal übersetzt werden müssen. Auch ermöglicht der JIT-Compiler eine stärkere Optimierung des Binärcodes. Allerdings sind solche Interpreter natürlich nur auf einer bestimmten Rechnerarchitektur lauffähig, weil sie Maschinencode für diese Architektur erzeugen.
Eine weitere Zwischenstufe sind Bytecode-Interpreter. Dabei wird der Quelltext zur Laufzeit vor seiner Ausführung in einen einfachen Zwischencode übersetzt, der dann von einem Interpreter, auch häufig als virtuelle Maschine bezeichnet, ausgeführt wird. Ein bekannter Vertreter dieser Gattung ist Python.
Bekannte Interpretersprachen sind BASIC, Perl, Python, Ruby und viele andere.
Manchmal wird der Quellcode nicht zur Laufzeit, sondern schon vorher in einen Zwischencode übersetzt (compiliert). In diesem Fall werden also Compiler und Bytecode-Interpreter wieder getrennt. Die prominenstesten Vertreter dieses Ansatzes sind die Implementierungen der Sprachen Java und C-Sharp.
Für manche Sprachen (etwa Smalltalk) gibt es je nach Anbieter Interpreter, Bytecode-Interpreter, JIT-Compiler, Compiler, nach C Compiler oder auch .NET Versionen oder eine .NET Brücke.
Der Übergang zwischen reinen Interpretern und reinen Compilern ist fließend.
Siehe auch: Kompilierung