molily: Java kompilieren vs. interpretieren

Beitrag lesen

Hallo,

ich stelle mir gerade folgende Frage: Sprachen wie Javascript, Python, PHP etc. werden alle interpretiert, können aber (anscheinend bis auf Javascript) auch kompiliert werden.

Die meisten Sprachen werden zu Bytecode kompiliert. Bei JavaScript, Python und PHP ist das im Gegenteil zu Java nur kein fest definiertes Set an Opcodes, sondern jede Engine hat ihren eigene Bytecode bzw. verschiedene Intermediate Representations. Letztlich ist das Ziel, Maschinencode zu erzeugen.

Neuere JavaScript-Engines wie V8 kompilieren z.B. direkt zu unoptimiertem Maschinencode, der etwa Typdaten für JIT-Optimierungen sammelt (http://wingolog.org/archives/2011/07/05/v8-a-tale-of-two-compilers).

Wie ist das mit Javasourcen. Kann man die auch interpretieren OHNE sie vorher in Bytecode umzuwandeln?

Könnte man schon, ja. Den Java-Source-Code kann man verarbeiten, wie man will. Die Java Virtual Machine (JVM) hingegen erwartet einen definierten Bytecode. Aus welcher Sprache der kompiliert wurde, ist wiederum egal. Deshalb laufen auf der JVM nicht nur Java, sondern ein dutzend andere Sprachen (z.B. Clojure, Scala, aber auch JavaScript, Python, Ruby).

Wenn ja, warum habe ich bisher keinen Interpreter gefunden, wenn nein, warum geht das nicht?

Experimentelle Interpreter, die Java ohne JVM ausführen, gibt es bestimmt, aber ernstzunehmende Projekte werden das nicht sein. Das Kompilieren von Java und anderen Sprachen zu Bytecode, der auf der JVM ausgeführt werden kann, hat sich bewährt. Die JVM ist sehr leistungsfähig, was Speichermanagement und JIT-Optimierungen angeht.

Mathias