Unterschied Compiler und Interpreter?

...komplette Frage anzeigen

4 Antworten

Beide nehmen sich jeden Befehl einzeln aus dem Quellcode vor, schauen nach, welche ihnen bekannte Anweisung dazugehört, laden ggf. die zugehörigen Parameter aus dem Quellcode, übersetzen die in Speicheradressen und bauen daraus einen computerverstehbaren Befehl zusammen.

Beim Compiler ist dieser computerverstehbare Befehl ein Befehl in Maschinensprache (ggf. für einen "virtuellen Prozessor" wie in Java oder .NET) und schreibt diesen in eine Datei. Diese Datei kann hinterher vom Zielprozessor direkt ausgeführt werden, ohne dass noch was übersetzt werden muss.

Beim Interpreter ist dieser computerverstehbare Befehl etwas, das nur für den Interpreter in diesem Augenblick gedacht ist. Der Interpreter führt diesen Befehl sofort aus.

Vorteil des Interpreters: Kann sofort loslegen. Nachteil: Dadurch, dass jeder Befehl einzeln unmittelbar vor Ausführung übersetzt wird, läuft das Programm langsamer. Besonders macht sich das bei "Schleifen" (Programmabschnitte werden mehrfach ausgeführt).

Vorteil des Compilers: Hohe Ausführungsgeschwindigkeit, besonders, wenn der Compiler "intelligen" ist, also sich auch die Befehle vor und nach dem aktuellen anschaut und hier kräftig umsortiert, wenn die Ausführung dadurch effizienter wird. Nachteil: Muss erst einen kompletten Abschnitt übersetzen und muss sich ggf. die benötigten "Bibliotheken" (Hilfsprogrammsammlungen) alle zusammensuchen und auch den Fall berücksichtigen, dass diese Bibliotheken auf dem Zielsystem fehlen oder veraltet sind.

Au weia, hier lese ich einiges Halbgares.

Ein Compiler übersetzt ein ganzes Modul oder Programm von einer Sprache (meist einer Hochsprache wie C, Pascal, Java) in eine andere Sprache (meist ein einfacher Objekt- oder Maschinenkode, manchmal eine Zwischensprache). Ob er es in eine Datei (meist ist das so) oder nur den Speicher schreibt, ist egal. Dabei gab es auch mehrstufige Übersetzungen, z.B. erst von C++ nach C, dann nach Assembler, dann von dort nach Maschinenkode. Ein Interpreter übersetzt nur den jeweils nächsten benötigten Befehl von einer Sprache in eine andere, d.h. in einer Schleife wird jeder Befehl beim Ablauf mehrfach übersetzt.

Natürlich gibt es inzwischen längst Mischformen, z.B. Interpreter, die ihre Ergebnisse cashen und somit wie ein Compiler jeden Befehl nur einmal übersetzen.

Ein weiterer wichtiger Unterschied ist: Der Compiler übersetzt das Programm zur Compilezeit i.d.R. (aber nicht zwangsweise) beim Entwickler (folglich muss der Quellkode nicht ausgeliefert werden), während ein Interpreter den Quellkode immer erst bei der Ausführung beim Anwender übersetzt. Damit ist die Programmausführung beim Anwender für compilierten Kode immer schneller als für interpretierten Kode, während umgekehrt die Entwicklung durch den Entfall der Compilezeit für interpretierten Kode einfacher und meistens schneller ist.

Ein Compiler übersetzt eine Sprache in eine andere Sprache, für die es dann einen Interpreter gibt.

Code zu interpretieren bedeutet, die Befehle, die er beschreibt, auszuführen.

Es muss keineswegs für jede Programmiersprache auch einen Interpreter geben. Eben weil das so ist, benötigt man Compiler.

grtgrt 01.07.2017, 16:20

C++ und Java sind recht komplizierte Sprachen. Sie direkt zu interpretieren würde in ihnen geschriebene Programme allzu langsam machen.

Daher übersetzt man sie in Code, dessen Interpretation deutlich weniger CPU-Zyklen erfordert.

0

Ein interpreter führt den Quellcode direkt aus ohne ein ausführbares Programm zu erstellen.
Der Compiler wandelt den Quellcode in ein ausführbares Programm

Was möchtest Du wissen?