¿Cómo es la JVM y el WORA de Java diferentes de otros lenguajes de alto nivel?

12

En el mundo de Java, a menudo hablamos de la JVM, y cuando Java era nuevo, tenía la característica supuestamente asesina de "Escribir una vez, ejecutar en cualquier lugar".

Por la forma en que las personas hablan y escriben, esto parece diferente de la forma en que funciona Python, por ejemplo. Sin embargo, no he tenido conocimiento de ninguna manera en que el código Python que he escrito funcionaría de manera diferente en otra máquina. (Aunque no he escrito tanto Python).

Entonces, ¿qué me estoy perdiendo? ¿Cómo es la JVM diferente de un intérprete de Python? ¿Hay alguna forma en que Python carece de la independencia de la plataforma Java? ¿O es solo una diferencia cultural?

Eric Wilson
fuente
1
La principal diferencia es la rigurosidad de la especificación JVM. Simplemente está muy bien definido cómo debe (no debería) comportarse.

Respuestas:

17

Java hace un muy buen trabajo al aislarlo del sistema operativo subyacente y le brinda las mismas herramientas exactas en la mayoría de las plataformas en las que trabaja para hablar con las cosas en el sistema operativo subyacente.

Python, por otro lado, no hace un buen trabajo al aislarlo del sistema operativo subyacente, no tiene una forma estándar de manejo entre las comunicaciones de proceso (observe las diferencias en el módulo sys y el módulo os entre una ventana y * implementación nix de Python, por ejemplo).

He escrito código en python que solo funcionaría en un cuadro * NIX o en un cuadro de Windows utilizando solo las llamadas API disponibles de Python, donde en Java sería muy difícil escribir código que fuera solo API Java que no funcionaría igual en ambos Cuadro de Windows o cuadro * NIX

mangelo
fuente
1
No es nada difícil escribir código Java que funcione solo en Windows; simplemente codifique una ruta de archivo de Windows como "C: \ MyApp \ data"
kevin cline
@kevincline Las rutas codificadas son una mala práctica en cualquier sistema operativo. Pero Java no requiere que haga esto, ya que ofrece métodos independientes del sistema operativo para recuperar directorios comunes como el directorio del usuario o la ruta de instalación del programa actual.
Philipp
3

Tópicamente y solo desde un tiempo de ejecución de idioma, hay poca diferencia. El JVM en particular está diseñado no solo como un intérprete sino también como un compilador de tiempo de ejecución, inferencia de código, una capa de virtualización instrumental que puede tener ganchos dinámicos aplicados, varias semánticas de GC y la capacidad de describir la ergonomía de la virtualización, por nombrar algunos. Python puede ejecutarse en una JVM? ¿Puede Java ejecutarse en un intérprete de Python?

La mayoría de los intérpretes son intérpretes de lenguaje de ejecución / token, JVM (y otros) como usted sabe interpretar / compilar / ejecutar código intermedio. IBM, por ejemplo, ha estado haciendo esto durante décadas fuera de Java, no es nada nuevo. ¿Incluso VB se ejecutó en código intermedio durante algún tiempo, creo?

El WORA ahora está casi pasado de moda, ya que muchos idiomas interpretados se ejecutan prácticamente en cualquier lugar sin cambios.

Jé Queue
fuente
3

Cuando Java era nuevo, WORA era algo de lo que jactarse, específicamente, que podía compilar en una plataforma y ejecutar eso ( código de bytes compilado) en otras plataformas.

Por supuesto, los idiomas interpretados se ejecutan de manera bastante similar, independientemente de en qué plataforma se ejecute el intérprete (siempre que el intérprete esté disponible para esa plataforma). Sin embargo, los sistemas de archivos, problemas de permisos, codificaciones, terminaciones de línea e innumerables problemas pequeños pero irritantes pueden causar dolores de cabeza. Algunas cosas que dependen de la plataforma no son fáciles de abstraer.

Joonas Pulakka
fuente
WORA en sí mismo no es suficiente. Lo realmente importante es que está muy bien definido cómo se ejecuta en todas partes, por lo que no es importante exactamente dónde se ejecutó.
Thorbjørn Ravn Andersen
1

¿Python tiene una GUI independiente de la plataforma?

De todos modos, la característica de WORA era, nuevamente, atraer a los programadores de C, ya que C tendía a modelar de cerca la plataforma subyacente, y como las plataformas eran diferentes (¿tamaño de la palabra? ¿Endianess?), La creación de programas de C totalmente portátiles requería gran cuidado y atención.

La promesa de Java era que todo este tedio no tenía que hacerse, ya que la plataforma está muy bien definida y SABES que un carácter es de 16 bits, etc. Además, la GUI está escrita en Java y también es 100% portátil, lo que significa que tu El programa puede ejecutarse en una computadora de la que nunca ha oído hablar e incluso ejecutarse correctamente.


fuente
66
Python tiene varias alternativas de GUI independientes de la plataforma: docs.python.org/faq/…
Joonas Pulakka
Las GUI de Java son conocidas por no mostrarse correctamente en varias plataformas, por lo que no me jactaría exactamente de ese aspecto. Sin embargo, estaría de acuerdo con el resto de su declaración.
ira
-4

Excepto que Java es enfáticamente no WORA. He visto software de Java que se rompió después de que Java se haya actualizado a una versión superior en el número de versión menor . En mi humilde opinión, WORA es solo un truco de marketing.

zvrba
fuente
1
Esto no es realmente una respuesta a la pregunta.
Eric Wilson
-1 porque Java es WORA para todos los fines prácticos. Se va a trabajar si se evitan los cortes específicos del sistema y esas cosas, obviamente, similar a la nativa JNI. He tenido más de 50,000 aplicaciones de línea funcionando perfectamente en Windows, Mac y Linux, sin cambios, la primera vez, con el mismo archivo .jar compilado. Si te apegas a Java puro, todo funciona.
mikera
1
Parece que has entendido mal lo que significa WORA.