Lernpfad:Objektorientierte Programmierung mit Java/Compiler und Interpreter

Aus Informatik-Box
Zur Navigation springen Zur Suche springen

Compiler und Interpreter in der Übersicht

EmbedVideo fehlt ein anzugebender Parameter.

Übersetzen und ausführen

Programme, die in der Programmiersprache Java geschrieben wurden, kannst du nicht einfach so starten. Dazu ist erst noch ein Zwischenschritt notwendig: Das Übersetzen.

Das übernimmt der Übersetzer oder im Englischen der Compiler.

Vertiefende Informationen zu Compilern

to compile bedeutet im Deutschen zusammenbauen bzw. -setzen, oder in der Informatik auch übersetzen. Bei Programmiersprachen also die Übersetzung von einer Codierung eines Programms in eine andere.

Ursprünglich ist die Übersetzung von der vom Menschen geschriebenen und für ihn verständlichen Codierung z.B. durch ASCII-Zeichen in einen von der Maschine ausführbaren Code - die Maschinensprache - gemeint.

Da die Maschinensprache von verschiedenen Faktoren abhängt (Prozessor, Betriebssystem) muss ein Programm für jedes System gezielt übersetzt werden. (Deshalb gibt es für viele Programme im Web auch verschieden Versionen zum Herunterladen. LibreOffice wurde zum Beispiel für verschiedene Linux, Windows und macOS Betriebssysteme compiliert.) C ist eine Sprache, die so funktioniert.

Die Übersetzung bei Java ist stattdessen nicht in Maschinensprache, sondern in Bytecode, eine Zwischensprache. Damit diese ausgeführt werden kann, ist noch ein Interpreter notwendig, auch Laufzeitumgebung genannt. Diese übersetzt den Bytecode bei Ausführung (zur Laufzeit) direkt in die Befehle der Maschinensprache. Die Laufzeitumgebung muss also speziell für jedes System compiliert worden sein, aber dann kann im Prinzip jeder Bytecode auf jeder Maschine ausgeführt werden.

Darüber hinaus gibt es noch Skriptsprachen, die gar nicht mehr compiliert werden müssten. Zum Beispiel PHP oder Python. Bei Ihnen werden die geschriebenen Programme direkt ausgeführt, bzw. interpretiert.

Jede Methode hat vor und Nachteile. Kompilieren in Maschinensprache erlaubt deutlich performantere (schnellere) Programme, die aber nur auf bestimmten Systemen funktionieren. Skriptsprache sind langsamer, können aber viel schneller implementiert werden.

Java geht einen Mittelweg. Das Kompilieren in Bytecode erlaubt es, die Programme vor dem Ausführen zu optimieren, wodurch sie schneller werden. Außerdem sind sie systemunabhängig ausführbar, sofern eine passende Laufzeitumgebung vorhanden ist. Allerdings sind Java-Programme in der Regel immer noch langsamer in der Ausführung.

Eine Besonderheit ist, dass der Bytecode auch aus anderen Sprachen als Java erzeugt werden kann. So gibt es mittlerweile eine Reihe anderer Sprachen wie Groovy, die sich in Java-Bytecode übersetzen lassen.