Wie unterscheidet sich die WORA von JVM und Java von anderen Hochsprachen?

11

In der Java-Welt sprechen wir oft über die JVM, und als Java neu war, hatte es die angeblich mörderische Funktion "Einmal schreiben, überall ausführen".

Von der Art und Weise, wie Menschen sprechen und schreiben, scheint sich dies von der Art und Weise zu unterscheiden, wie beispielsweise Python funktioniert. Ich war mir jedoch nicht bewusst, dass der von mir geschriebene Python-Code auf einem anderen Computer anders funktionieren würde. (Obwohl ich nicht so viel Python geschrieben habe.)

Also, was vermisse ich? Wie unterscheidet sich die JVM von einem Python-Interpreter? Gibt es eine Möglichkeit, dass Python Javas Plattformunabhängigkeit fehlt? Oder ist das nur ein kultureller Unterschied?

Eric Wilson
quelle
1
Der Hauptunterschied ist die Strenge der JVM-Spezifikation. Es ist einfach sehr gut definiert, wie es sich verhalten muss (nicht sollte).

Antworten:

16

Java ist sehr gut darin, Sie vom zugrunde liegenden Betriebssystem zu isolieren, und bietet Ihnen auf den meisten Plattformen, auf denen es arbeitet, um mit den Dingen im zugrunde liegenden Betriebssystem zu kommunizieren, genau dieselben Tools.

Python hingegen ist nicht so gut darin, Sie vom zugrunde liegenden Betriebssystem zu isolieren. Es gibt keine Standardmethode für die Handhabung zwischen Prozesskommunikation (sehen Sie sich die Unterschiede im sys-Modul und im os-Modul zwischen Windows und * an nix Implementierung von Python zum Beispiel.)

Ich habe Code in Python geschrieben, der nur auf einer * NIX-Box oder einer Windows-Box mit nur verfügbaren Python-API-Aufrufen funktioniert. In Java wäre es sehr schwierig, Code zu schreiben, der nur eine Java-API ist, die auf beiden nicht gleich funktioniert Windows-Box oder * NIX-Box

mangelo
quelle
1
Es ist überhaupt nicht schwierig, Java-Code zu schreiben, der nur unter Windows funktioniert. Codieren Sie einfach einen Windows-Dateipfad wie "C: \ MyApp \ data"
Kevin Cline
@kevincline Hardcodierte Pfade sind auf jedem Betriebssystem eine schlechte Praxis. Java erfordert dies jedoch nicht, da es betriebssystemunabhängige Methoden zum Abrufen allgemeiner Verzeichnisse wie des Benutzerverzeichnisses oder des Installationspfads des aktuellen Programms bietet.
Philipp
3

Aktuell und nur von einer Sprachlaufzeit gibt es wenig Unterschied. Insbesondere die JVM ist nicht nur als Interpreter konzipiert, sondern auch als Laufzeit-Compiler, Code-Inferenz, instrumentelle Virtualisierungsschicht, auf die dynamische Hooks angewendet werden können, verschiedene GC-Semantiken und die Fähigkeit, die Ergonomie der Virtualisierung zu beschreiben, um nur einige zu nennen. Python kann in einer JVM ausgeführt werden? Kann Java in einem Python-Interpreter ausgeführt werden?

Die meisten Interpreter sind Laufzeit-Sprach- / Token-Interpreter, JVMs (und andere), wie Sie wissen, Interpretations- / Kompilierungs- / Run-Zwischencode. IBM zum Beispiel tut dies seit Jahrzehnten außerhalb von Java, es ist nichts Neues. Sogar VB lief einige Zeit im Zwischencode, glaube ich?

Die WORA ist heute größtenteils passé, da viele interpretierte Sprachen fast überall unverändert laufen.

Jé Queue
quelle
3

Als Java neu war, war WORA etwas, mit dem man sich rühmen konnte - insbesondere, dass man auf einer Plattform kompilieren und diesen (kompilierten Bytecode) auf anderen Plattformen ausführen konnte.

Natürlich laufen interpretierte Sprachen ziemlich ähnlich, unabhängig davon, auf welcher Plattform der Interpreter ausgeführt wird (solange der Interpreter für diese Plattform verfügbar ist). Dateisysteme, Berechtigungsprobleme, Codierungen, Zeilenenden und unzählige andere kleine, aber irritierende Probleme können jedoch Kopfschmerzen verursachen. Einige plattformabhängige Dinge lassen sich nicht leicht abstrahieren.

Joonas Pulakka
quelle
1

Hat Python eine plattformunabhängige GUI?

Wie auch immer, die WORA-Funktion sollte - wieder - C-Programmierer anlocken, da C dazu neigte, die zugrunde liegende Plattform genau zu modellieren, und da die Plattformen unterschiedlich waren (Wortgröße? Endianess?), Um vollständig portable C-Programme zu erstellen, war große Sorgfalt und Aufmerksamkeit erforderlich.

Das Java-Versprechen war, dass all diese Langeweile nicht erledigt werden musste, da die Plattform sehr gut definiert ist und Sie wissen, dass ein Zeichen 16 Bit usw. ist. Auch die GUI ist in Java geschrieben und zu 100% portabel, was bedeutet, dass Ihre Das Programm kann auf einem Computer ausgeführt werden, von dem Sie noch nie gehört haben, und sogar korrekt ausgeführt werden.


quelle
6
Python hat mehrere plattformunabhängige GUI-Alternativen: docs.python.org/faq/…
Joonas Pulakka
Java-GUIs sind dafür berüchtigt, dass sie auf verschiedenen Plattformen nicht richtig angezeigt werden, daher würde ich mich nicht genau mit diesem Aspekt rühmen. Ich würde jedoch dem Rest Ihrer Aussage zustimmen.
Wut
-4

Nur dass Java nachdrücklich nicht WORA ist. Ich habe Java-Software gesehen, die kaputt gegangen ist, nachdem Java auf eine höhere Version mit der Nebenversionsnummer aktualisiert wurde . IMHO, WORA ist nur eine Marketing-Spielerei.

zvrba
quelle
1
Dies ist keine wirkliche Antwort auf die Frage.
Eric Wilson
-1, weil Java für alle praktischen Zwecke WORA ist. Es wird funktionieren, wenn Sie systemspezifische Hacks und offensichtlich native Dinge wie JNI vermeiden. Ich habe mehr als 50.000 Zeilenanwendungen perfekt unter Windows, Mac und Linux laufen lassen, ohne Änderungen beim ersten Mal mit derselben kompilierten JAR-Datei. Wenn Sie sich an reines Java halten, funktioniert alles.
Mikera
Anscheinend haben Sie falsch verstanden, was WORA bedeutet.