En quoi la JVM et la WORA de Java sont-elles différentes des autres langages de haut niveau?


12

Dans le monde Java, nous parlons souvent de la JVM, et lorsque Java était nouveau, il avait la fonction supposée tueuse de "Write Once, Run Anywhere".

De la façon dont les gens parlent et écrivent, cela semble différent de la façon dont Python, par exemple, fonctionne. Pourtant, je ne savais pas que le code Python que j'avais écrit fonctionnerait différemment sur une autre machine. (Même si je n'ai pas beaucoup écrit en Python.)

Alors qu'est-ce qui me manque? En quoi la JVM est-elle différente d'un interpréteur Python? Existe-t-il un moyen pour Python de ne pas être indépendant de la plate-forme Java? Ou est-ce juste une différence culturelle?


1
La principale différence est la rigueur de la spécification JVM. Il est tout simplement très bien défini comment il doit (ne doit pas) se comporter.

Réponses:


17

Java fait un très bon travail pour vous isoler du système d'exploitation sous-jacent et vous donne les mêmes outils exacts sur la plupart des plates-formes sur lesquelles il travaille pour parler des choses dans le système d'exploitation sous-jacent.

Python, d'autre part, ne fait pas un bon travail pour vous isoler du système d'exploitation sous-jacent, il n'a pas de méthode standard de gestion entre les communications de processus (regardez les différences entre le module sys et le module os entre une fenêtre et * implémentation nix de Python par exemple.)

J'ai écrit du code en python qui ne fonctionnerait que sur une boîte * NIX ou Windows en utilisant uniquement les appels d'API disponibles Python, où en Java il serait très difficile d'écrire du code qui était juste une API Java qui ne fonctionnerait pas de la même Boîte Windows ou * boîte NIX


1
Il n'est pas du tout difficile d'écrire du code Java qui ne fonctionne que sous Windows; juste coder en dur un chemin de fichier Windows comme "C: \ MyApp \ data"
kevin cline

@kevincline Les chemins codés en dur sont une mauvaise pratique sur n'importe quel système d'exploitation. Mais Java ne vous oblige pas à le faire, car il propose des méthodes indépendantes du système d'exploitation pour récupérer des répertoires communs comme le répertoire utilisateur ou le chemin d'installation du programme actuel.
Philipp

3

Topiquement et uniquement à partir d'un runtime de langue, il y a peu de différence. La JVM en particulier est conçue non seulement comme un interprète, mais aussi un compilateur d'exécution, l'inférence de code, une couche de virtualisation instrumentale qui peut avoir des crochets dynamiques appliqués, diverses sémantiques GC et la capacité de décrire l'ergonomie de la virtualisation, pour n'en nommer que quelques-uns. Python peut fonctionner dans une JVM? Java peut-il s'exécuter dans un interpréteur Python?

La plupart des interprètes sont des interprètes de langage / jeton d'exécution, des machines virtuelles Java (et d'autres), comme vous le savez, interpréter / compiler / exécuter du code intermédiaire. IBM, par exemple, fait cela depuis des décennies en dehors de Java, ce n'est pas nouveau. Même VB a fonctionné en code intermédiaire pendant un certain temps, je crois?

Le WORA est pour la plupart dépassé maintenant, car de nombreux langages interprétés fonctionnent à peu près n'importe où sans changement.


3

Lorsque Java était nouveau, WORA était quelque chose dont on pouvait se vanter - en particulier, que vous pouviez compiler sur une plateforme et l'exécuter (bytecode compilé) sur d'autres plateformes.

Bien sûr, les langages interprétés fonctionnent à peu près de la même manière, quelle que soit la plateforme sur laquelle s'exécute l'interpréteur (tant que l'interpréteur est disponible pour cette plateforme). Cependant, les systèmes de fichiers, les problèmes d'autorisation, les encodages, les fins de ligne et d'innombrables autres petits problèmes irritants peuvent provoquer des maux de tête. Certaines choses dépendantes de la plateforme ne sont pas faciles à résumer.


WORA en soi ne suffit pas. Le point vraiment important est qu'il est très bien défini comment il fonctionne partout, ce qui rend peu important exactement il a été exécuté.
Thorbjørn Ravn Andersen

1

Python a-t-il une interface graphique indépendante de la plate-forme?

Quoi qu'il en soit, la fonctionnalité WORA était - encore une fois - d'attirer les programmeurs C, car C avait tendance à modéliser la plate-forme sous-jacente, et comme les plates-formes étaient différentes (taille du mot? Endianess?), La création de programmes C entièrement portables nécessitait beaucoup de soin et d'attention.

La promesse de Java était que toute cette fastidieuse ne devait pas être faite, car la plate-forme est très bien définie et vous SAVEZ qu'un caractère est de 16 bits, etc. L'interface graphique est également écrite en Java et également 100% portable, ce qui signifie que votre programme peut s'exécuter sur un ordinateur dont vous n'avez jamais entendu parler et même fonctionner correctement.


6
Python dispose de plusieurs alternatives GUI indépendantes de la plateforme: docs.python.org/faq/…
Joonas Pulakka

Les interfaces graphiques Java sont connues pour ne pas s'afficher correctement sur diverses plates-formes, donc je ne me vanterais pas exactement de cet aspect. Cependant, je suis d'accord avec le reste de votre déclaration.
rage

-4

Sauf que Java n'est absolument pas WORA. J'ai vu un logiciel Java qui s'est cassé après que Java a été mis à niveau vers une version supérieure sur le numéro de version mineur . À mon humble avis, WORA n'est qu'un gadget marketing.


1
Ce n'est pas vraiment une réponse à la question.
Eric Wilson

-1 car Java est WORA à toutes fins pratiques. Il va travailler si vous évitez hacks spécifiques du système et de toute évidence des choses indigènes comme JNI. J'ai eu plus de 50 000 applications en ligne parfaitement exécutées sur Windows, Mac et Linux, sans changement, la première fois, avec le même fichier .jar compilé. Si vous vous en tenez au Java pur, tout fonctionne.
mikera

1
Il semble que vous ayez mal compris ce que signifie WORA.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.