Wenn die JVM Java-Quelltext direkt in Maschinencode übersetzen würde, funktioniert dann das Programm nicht immer noch plattformübergreifend?

2 Antworten

> Wenn die JVM Java Quelltext direkt in maschinen code übersetzen würde funktioniert dann das Programm nicht immer noch Plattform übergreifend?

Klar würde das dann noch Plattform übergreifend funktionieren.

Java Script ist ein gutes Beispiel für so eine Sprache, auch wenn sie wenig mit Java gemeinsam hat. JavaScript wird ja interpretiert (bzw. JIT (just in time) kompiliert), ohne dass vorher aus dem ursprünglichen source code bytecode kompiliert wird. Da wird der source code optional maximal etwas optimiert, aber das Ergebnis ist trotzdem Java script syntax. Python wäre ein anderes gutes Beispiel.

> b) andere Programmiersprachen auch zum Java Byte Code greifen. 

Was du vielleicht meinst ist, dass andere Sprachen ebenfalls zu Java bytecode kompiliert werden können? Zb. Kotlin oder Groovy. Das nennt man dann oft JVM (für Java Virtual machine) Sprachen. Weniger wahrscheinlich ist, dass du bindings aus Java in andere Sprachen meinst (JNI), darüber kann man nicht Plattform übergreifende Bibliotheken in Plattform spezifischen Maschinen Code ansteuern.

Bytecode kann wesentlich schneller gelesen werden, einfache Optimierungen kann man dabei auch machen.

> c) dass es dann schwierig wäre ein Programm vor dem Abstürzen zu bewahren

Durch den Kompilierungsschritt kann man sicher stellen, dass der Code auf Syntax Ebene korrekt ist. Das spricht für Byte Code über source code.

> a) für den Benutzer einen ziemlichen Aufwand an Wartezeit geben würde, bis dass das Programm dann ausgeführt wird

Das ist natürlich auch darin begründet, weil das Design eben auf diesen Zwischenschritt beruht. Bei einer Sprache die darauf ausgelegt ist, ist das vertretbar, aber natürlich ist mehr Übersetzung zur Laufzeit immer mit mehr Aufwand verbunden. JIT Compiler sind aber mittlerweile durchaus ziemlich gut.

Zusammenfassung:

Andere sprachen wie JavaScript zeigen, dass es ohne bytecode funktioniert. Die Nachteile kann man in der Praxis ausgleichen. Und JavaScript kann, in manchen Szenarien, auch schneller als Java sein. Beides ist eine valide Design Entscheidung.

Wenn die JVM Java-Quelltext direkt in Maschinencode übersetzen würde, funktioniert dann das Programm nicht immer noch plattformübergreifend?

Wenn die JVM den gesamten Compiler Huckepack trägt, wäre das im Kern machbar, bedeutet aber eben auch, daß bei jeder Ausführung komplett kompiliert werden muß.

(Es sei denn natürlich, DU würdest die Bytecodekompilate resp. nativen Kompilate Cachen udn wiederverwenden).