IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Pourquoi pas la compilation native ?


Sujet :

Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Par défaut Pourquoi pas la compilation native ?
    Bonjour,


    Je suis passé du C à Java et j'ai remarqué qu'un des avantages du java
    ce sont les API fournies en standart, donc on peut quasiment tout faire
    sans installer d'autres API, ce qui permet une portabilité facile.
    Le revers c'est qu'il faut passer par une machine virtuelle.
    Alors que le C lui s'execute directement.

    Je me suis demandé pourquoi java ne permettrait il pas de compiler directement en natif? Cela permettrait de faire des gains de perfs énormes,
    en fait ce qui aurait été génial c'est que le compilateur transforme le programme en java en un autre language genre c++ celui-ci dépendant de la plateforme puis le compile en executable.

    Une surcouche de C++ en quelque sorte mais universelle car la plupart des fonctions dependantes de l'os auraient été traduites à la volé en natives ou créées si elles n'existent pas, au lieu d'une VM on aurait un compilateur qui traduirait en fonction des plates formes souhaitées.

    Je ne pense pas que ça demanderais beaucoups plus de travail que d'adapter une JVM à chaque plateforme, vu qu'il faut dans tout les cas adapter le code en fonction de la plateforme cible.

    Mais je pense que sun a fait une JVM avant tout pour vendre des licenses d'exploitation ce qui est normal pour une entrerprise.

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par ishikawa
    Bonjour,


    Je suis passé du C à Java et j'ai remarqué qu'un des avantages du java
    ce sont les API fournies en standart, donc on peut quasiment tout faire
    sans installer d'autres API, ce qui permet une portabilité facile.
    Le revers c'est qu'il faut passer par une machine virtuelle.
    Alors que le C lui s'execute directement.

    Je me suis demandé pourquoi java ne permettrait il pas de compiler directement en natif? Cela permettrait de faire des gains de perfs énormes,
    en fait ce qui aurait été génial c'est que le compilateur transforme le programme en java en un autre language genre c++ celui-ci dépendant de la plateforme puis le compile en executable.

    Une surcouche de C++ en quelque sorte mais universelle car la plupart des fonctions dependantes de l'os auraient été traduites à la volé en natives ou créées si elles n'existent pas, au lieu d'une VM on aurait un compilateur qui traduirait en fonction des plates formes souhaitées.

    Je ne pense pas que ça demanderais beaucoups plus de travail que d'adapter une JVM à chaque plateforme, vu qu'il faut dans tout les cas adapter le code en fonction de la plateforme cible.

    Mais je pense que sun a fait une JVM avant tout pour vendre des licenses d'exploitation ce qui est normal pour une entrerprise.
    C'est exactement ce que fait la JVM lorsque tu exécutes un de tes programmes, elle le "compile" (pas tout, juste les parties critiques en gros) en natif, de manière à ce que les perfs soient très bonnes...

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par ishikawa
    Je me suis demandé pourquoi java ne permettrait il pas de compiler directement en natif? Cela permettrait de faire des gains de perfs énormes,
    Il est déjà possible de compiler directement en natif, mais le gain en performance n'est pas vraiment évident !

    En fait la JVM compile le bytecode en code natif à la volée, et comme elle connait toutes les spécificités de l'environnement d'exécution elle peut effectuer des optimisations bien plus poussées...

    D'ailleur la compilation en natif n'apporte pas forcément de meilleure performance (lire : La machine virtuelle Java est-elle vraiment lente ?).



    Citation Envoyé par ishikawa
    au lieu d'une VM on aurait un compilateur qui traduirait en fonction des plates formes souhaitées.
    C'est exactement ce que fait la JVM : elle traduit le bytecode en code natif à la volée. L'avantage c'est qu'il n'y a qu'un code à redistribuer

    Citation Envoyé par ishikawa
    Je ne pense pas que ça demanderais beaucoups plus de travail que d'adapter une JVM à chaque plateforme, vu qu'il faut dans tout les cas adapter le code en fonction de la plateforme cible.
    Non, mais au final la compilation direct en natif n'apporte pas beaucoup d'intérêt, si ce n'est de perdre la portabilité...

    Citation Envoyé par ishikawa
    Mais je pense que sun a fait une JVM avant tout pour vendre des licenses d'exploitation ce qui est normal pour une entrerprise.
    Les licenses de Java ne sont pas vendus. Donc que le code soit compilé en natif ou pas ne changerait rien pour Sun...

    a++

  4. #4
    Membre éclairé Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Par défaut
    JVM pas lent ? Code natif sans intéret ?

    je ne suis absolument pas d'accord. Pour avoir coder en C et java, et un peu de C++. Java est bien le plus lent des trois. Le bytecode est une traduction pure du code java. Ca permet de le parser plus rapidement mais c'est tout. De plus il n'y pas d'optimisation comme le font gcc et g++.

    Sinon pour ce qui est de l'execution, le java reste néanmoins en grande partie de l'interprété a la première execution. Et la compilation a la volée fonctionne mal par rapport a du C# par exemple.

    Comment est ce que vous faites vos bench ?

  5. #5
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Nous faisons - enfin, moi, en tous cas - nos benchs au visu. Je fais une appli java, et je regarde si elle fonctionne aussi vite que les autres... que toutes les autres, y compris les applis natives. Et qu'elles fonctionnent aussi vite que l'utilisateur le souhaite, c'est à dire qu'il ne se rende même pas compte que il y a une appli.

    Et les applis - en tous cas les miennes - fonctionnent aussi vite que toutes les applis faites en C ou C++, comme KDE, etc, et font des choses parfaitement comparables.

    J'admets toutefois qu'il reste une marge au sujet des applis en ligne de commande, c'est à dire que ces dernières vont beaucoup plus vite.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Par défaut
    Les licenses de Java ne sont pas vendus. Donc que le code soit compilé en natif ou pas ne changerait rien pour Sun...
    Je crois que Sun vends la license java pour les terminaux embarqués, genre les telephones portables, les lecteurs Blue-Ray ....

    Me tromperais-je ?

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ishikawa
    Je crois que Sun vends la license java pour les terminaux embarqués, genre les telephones portables, les lecteurs Blue-Ray ....
    Je dois dire que je ne connais pas du tout le monde de l'embarqué, ni les performances de ces JVMs, mais les spécifications de J2ME doivent surement permettre à n'importe qui de créer sa propre JVM...

    Mais l'intérêt d'un bytecode portable y est encore plus important : tu te vois recompiler ton application pour les 500 types de téléphone différent ???

    a++

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Par défaut
    Les licenses de Java ne sont pas vendus. Donc que le code soit compilé en natif ou pas ne changerait rien pour Sun...
    Je crois que Sun vends la license java pour les terminaux embarqués, genre les telephones portables, les lecteurs Blue-Ray et ceux qui utilisent une jvm hardware

    Me tromperais-je ?

    Si ce n'est pas le cas alors je ne comprends pas pourquoi Sun n'aurait pas tout simplement créé un language portable sur tous les systemes sans JVM.

    J'ai remarqué une tendance qui monte chez les grands constructeurs de GSM dont NOKIA et SAMSUNG de fournir un SDK complet en C/C++ pour symbian os qui commence à devenir de plus un standart pour portable.

    Je crois que cette tendance est du au cout de la JVM en matiere de temps processeur ou en hardware si la jvm est une puce ainsi que l'autonomie que cela ponstionne, de plus C/C++ permet de controler le hardware et de faire des jeux de qualité.

    Je trouve fort dommage que Java ne permette pas de compiler du java en natif pur, Java est un trés bon language malheureusement il ne peut remplacer le C/C++ à cause de son défaut principal la JVM ajoute une couche entre le programme et l'os.

  9. #9
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    En te lisant ishikawa, j'ai la forte impression que tu es contre-java. je ne vais pas jeter la pierre, java a ses qualités et ses defauts.

    Seulement si tu souhaites débattre de ca, il y a :
    "C++ versus Java"
    "C# versus Java"
    "DotNet versus Java"
    Et "quel est votre langage préféré" (majorité pour Java)
    tout ca ici : http://www.developpez.net/forums/forumdisplay.php?f=40

    Ce sont des debats qui font rages depuis bien longtemps.


    à cause de son défaut principal la JVM ajoute une couche entre le programme et l'os.
    En BTS on nous apprends les fameuses 7couches du systèmes... alors une de plus ou de moins...

    Il faut arreter de penser qu'au performance de temps en temps. On le dit plus lent que les autres, peut etre, mais la realisation du logiciel et nettement plus rapide.

    Quand j'installe des logiciels ou des jeux, quasiment a chaque fois est installé une application tiers, genre python, framework 2, truc ci ou truc ca. alors installer une fois pour toute la jvm, ce n'est pas cher payer.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Par défaut
    Ce n'est pas que je n'aime pas Java au contraire!

    Mais je trouve que si Sun avait assuré la portabilité via le compilateur et son API universelle, au lieu d'une machine virtuelle pour chaque sytème, ils auraient pratiquement enterré le C++.

    Je ne pense pas que l'adaptation du compilateur pour un systeme soit plus compliqué que d'adapter la JVM pour celui-ci.

    Ca ne t'aurait pas fais plaisir d'avoir un language et une API aussi puissant
    compilable en NATIF PURE?

    Imagine que des DEVS de jeux par exemple puissent utiliser java pour faire des gameplay comme Half Life portables sur MAC et linux. L'hégémonie de Microsoft aurait eu son bourreau car la plupart des jeux ou applications professionnelles auraient été porté sans trop de difficultés sur les autres OS.

    Les programmes auraient alors l'API JAVA comme socle commun ils seraient moins lourds en terme de poids, et les autres API se grefferaient à l'API principale, rendant une application plus cohérente et facile à désinstaller, avec moins de fichiers placés un peu partout sur le systeme.

    Voila mon point de vue sur ce qui serait le Killer language, car aujourd'hui plus qu'hier quand on voit que Linux et MacOSX ont de plus en plus d'utilisateurs, il est anormal que cela soient obligés d'installer windows pour avoir acces à la majorité des applications.

    Il serait temps que Microsoft cesse d'utiliser ces logiciels tiers uniquement portés sous windows comme argument principal au lieu de chercher a améliorer son OS.

    Pour les programmeurs cela aurait été une aubaine, car ils seraient plus universels avec la connaissance du Java, le marché du travail et de la formation seraient clarifiés.

    PS: Le sujet de cette discution n'est pas JAVA VS C++ mais JAVA++

  11. #11
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    Ca ne t'aurait pas fais plaisir d'avoir un language et une API aussi puissant
    compilable en NATIF PURE?
    non je prefere la portabilité et la moindre taille, on peut faire une appli java correct sur moins d'1Mo et ca grace a la JVM. je ne voudrais pas avoir a telecharger une appli de 45Mo "soit disant" plus rapide sous pretexte qu'elle est compilée en natif, alors que le java est bien assez performant même pour des jeux et des activités pro. java ne doit pas prendre partie selon moi, le java est au dessus des contraintes techniques et doit le rester.


    Mais tout ca a déjà été dit dans le debat C++/Java.

  12. #12
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ishikawa
    Je crois que Sun vends la license java pour les terminaux embarqués, genre les telephones portables, les lecteurs Blue-Ray et ceux qui utilisent une jvm hardware

    Me tromperais-je ?
    Je ne sais pas : je n'ai aucune connaissance du monde de J2ME...


    Citation Envoyé par ishikawa
    Je trouve fort dommage que Java ne permette pas de compiler du java en natif pur, Java est un trés bon language malheureusement il ne peut remplacer le C/C++ à cause de son défaut principal la JVM ajoute une couche entre le programme et l'os.
    Ben comme je l'ai dit c'est déjà possible avec GCJ ou Excelsior JET notamment...


    Citation Envoyé par ishikawa
    Mais je trouve que si Sun avait assuré la portabilité via le compilateur et son API universelle, au lieu d'une machine virtuelle pour chaque sytème, ils auraient pratiquement enterré le C++.
    Mais tu perds la facilité de déploiement (obligé de déployer une application par OS/architecture) originellement voulu par Sun. Et même si Java s'est plutôt retrouvé coté serveur ces dernières années, il a toutes ses chances de faire un retour coté client...


    Citation Envoyé par ishikawa
    Ca ne t'aurait pas fais plaisir d'avoir un language et une API aussi puissant
    compilable en NATIF PURE,
    Les applis Java sont compilé en natifs... directement à l'exécution. Cela me convient très bien



    Citation Envoyé par ishikawa
    Imagine que des DEVS de jeux par exemple puissent utiliser java pour faire des gameplay comme Half Life portables sur MAC et linux. L'hégémonie de Microsoft aurait eu son bourreau car la plupart des jeux ou applications professionnelles auraient été porté sans trop de difficultés sur les autres OS.
    L'hégémonie de Microsoft est lié à DirectX qui a remplacé OpenGL dans le domaine des jeux...
    Cela aurait surement été la même chose avec Java (en particulier avec une compilation native).

    Il est possible de faire des jeux portables même en C++, mais Linux et MacOS (dans une moindre mesure) ne sont pas encore des cibles suffisamment intéressantes pour l'industrie du jeux-vidéo...

    Citation Envoyé par ishikawa
    Voila mon point de vue sur ce qui serait le Killer language, car aujourd'hui plus qu'hier quand on voit que Linux et MacOSX ont de plus en plus d'utilisateurs, il est anormal que cela soient obligés d'installer windows pour avoir acces à la majorité des applications.
    Un Java compilable en natif n'aurait pas forcément améliorer cela puisque justement il serait encore plus simple de faire des programmes limité à un système !

    Si Java ne s'est pas imposé coté client c'est en parti à cause du fait que Microsoft utilisait une JVM obsolète et incompatible qui ne supportait pas Swing mais qui intégrait des API Win32...

    a++

  13. #13
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Il me semble que historiquement, Sun avait prévu de faire des microprocesseurs dont le code machine était directement le bytecode java. Cette idée est tombée à l'eau, je crois que le bytecode s'est révélé ingérable de ce coté là.

    Par chance, une autre technologie s'est révélée intéressante : celle du hotspot, ou compilateur à la volée, qui fonctionne bien, et qui rend peu intéressante l'idée de compilation native.

    Je pense que cette idée de hotspot n'était pas prévue au départ, en tous cas, pas qu'elle ait un telle place (sauf évidemment par les consultants habituels qui pensent à tout).

    Je pense même que c'est là la véritable innovation de java ; des langages portables, et/ou avec des bytes codes, avant, il y en avait déjà eu des dizaines. Mais c'est la première fois que l'on développe à ce point la notion de compilation à la volée.

    Elle est centrale, dans la notion de vitesse d'exécution bien sûr, mais aussi dans la notion de portabilité : plus il y a de code écrit en java, moins il y a de bibliothèques natives ou de code traduit en natif, et mieux la portabilité est assurée.


    Ah ! il faut toujours un peu de chance...

  14. #14
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par gifffftane
    Il me semble que historiquement, Sun avait prévu de faire des microprocesseurs dont le code machine était directement le bytecode java. Cette idée est tombée à l'eau, je crois que le bytecode s'est révélé ingérable de ce coté là.
    Ce point nous avait ete effectivement indique a la fac il y a longtemps (hum 1998~99) lorsque nous avions recut les premieres JavaStation, la generation suivantes etait sensee etre equipee de puces/CPU prenant directement en garge le bytecode comme le wiki le mentionne (les profs en etaient tout exites a l'epoque...). Mais ca n'est jamais venu, et les JavaStation ont elles-meme ete un gros flop.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Pourquoi pas WinDev 9 ?
    Par nyarla01 dans le forum WinDev
    Réponses: 35
    Dernier message: 25/07/2006, 20h41
  2. [sqlExp.pas] : échec compilation
    Par PpPool dans le forum Bases de données
    Réponses: 12
    Dernier message: 11/05/2006, 11h50
  3. N'arrive pas a compiler
    Par vodevil dans le forum MFC
    Réponses: 3
    Dernier message: 21/08/2005, 21h39
  4. [Language][DAO]Pourquoi pas des Singletons ?
    Par le Daoud dans le forum Langage
    Réponses: 11
    Dernier message: 04/05/2005, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo