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

Python Discussion :

Y a t-il une différence entre machine virtuelle et interpréteur?


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut Y a t-il une différence entre machine virtuelle et interpréteur?
    Bonjour,

    Dernièrement, j'ai quelques collègues qui m'ont fait part du fait qu'ils n'aimaient pas beaucoup Java, parce que la jvm implémentée ne faisait pas forcément ce qu'il en attendait... !?
    Ils m'ont dit cependant qu'il aimait bien python et que la jvm et l'interpréteur n'était pas du tout la même chose...
    C'est quoi exactement la différence? L'interpréteur gère aussi sa mémoire, etc...?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    lol
    C'est amusant car en réalité Python fonctionne aussi sur base d'une machine virtuelle. La diférence avec Java, c'est qu'il n'y a pas besoin de compiler le programme avant l'exécution, le programme est compilé en bytecode à la volée si nécessaire.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Pour répondre à ta question, un interpréteur "pur" exécute les instructions du langage directement, un compilateur "pur" traduit le langage en code machine directement. Les implémentations à base de machine virtuelle se situe entre les deux, avec une phase de compilation en byte code et une phase d'exécution (interprétation) du bytecode. Le principal argument pour ces systèmes est que l'interpétation du bytecode est plus efficace que l'interprétation du langage, et le bytecode est portable d'une architecture à une autre. En Java les deux phases sont séparées, ce qui permet une analyse et une détection d'erreur plus poussée du programme par le compilateur (d'autant plus efficace que Java est typé statiquement); en Python elle sont entremêlées (ce qui permet une plus grande souplesse, et d'être considéré comme un langage interprété).

    [edit: Clarifications]

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    D'accord, mais il y a un truc que j'ai du mal à comprendre en ce moment...
    Lorsque l'on fait un programme, on aimerait que celui soit portable sur n'importe quelle machine (et sous n'importe quel système).
    Hors, en réalité, les langages comme Java et Python sont dit portables parce qu'il y a des personnes qui ont développé un interpréteur (jvm) qu'ils ont du compiler (donc nécessité d'avoir un compilateur au départ) pour chaque type de processeur où ils voulaient que les programmes (script) soit interprétés.
    Ensuite, certes on installe une fois l'interpréteur ou jvm, et hop la compatibilité des programmes est assuré. Sauf bien sur, par exemple, un programme java devra peut être modifier les api qu'il utilise si on veut que celui ci tourne sur la jvm plus petite installée sur un téléphone portable.

    Hors, quand on développe un programme en C++ par exemple. Certes, on doit le compiler avec le compilateur approprié à tous processeur sur lequel on veut le voir tourner. Ensuite, certes ce n'est pas directement le programme qui est portable mais l'exécutable pour le processeur en question.

    Donc, en fait, dans les deux cas, on est obligé à la base d'avoir un compilateur. Et en plus, les programmes qui donne un exécutable natif pour le compilateur sont plus rapides. Donc, vraiment qu'est qui fait que l'on choisit un programme dit portable ou alors un executable portable pour le processeur? Enfin, je sais pas si vous voyez où je veux en venir...?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Je ne suis peut-être pas le mieux placé pour répondre, étant donné que je trouve que l'argument de la portabilité n'est pas le plus important dans le choix d'un langage (je ne dis pas que la portabilité n'est pas importante).

    La facilité d'écrire un code portable dépend plus des librairies disponibles pour le langage que du langage lui-même. Si Python et Java sont réputés plus portables que C++, c'est aussi parce que leur librairie standard et bien fournie, et (presque) identique sur les différentes plateformes, et parce qu'ils sont définis, en tant que langage, par une implémentation plus que par un standard (c'est plus vrai dans le cas de Python que de Java, mais tout de même). Je ne suis pas un expert, mais je crois qu'il est aussi difficile d'écrire en C++ un programme portable d'un compilateur à un autre que portable d'un OS à un autre.

    Mais bon, C++ et Python sont rarement en concurrence pour un même projet. Et si c'est le cas, l'argument sera plutôt rapidité de développement vs rapidité d'exécution. Et quand différents langages sont en concurrence, d'autres facteurs, tels que les librairies disponibles dans le domaine d'application ou l'expertise des développeurs avec le langage sont des facteurs plus importants je pense. Bien souvent, la rapidité à l'exécution doit seulement être suffisante, pas besoin quelle soit optimale (sauf peut-être si tu développes un jeu 3D next-gen ou le prochain Photoshop).

    Je ne comprends pas bien ton argument quand tu dis qu'il faut bien un compilateur à la base. Peut-être, mais ce ne sont pas les mêmes personnes qui doivent l'utiliser. Heureusement, le développeur Java ne doit pas recompiler la JVM chaque fois qu'il compile son programme. Le développeur Python n'a même pas à se préoccuper de compilation...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    Je vois.
    Mon argument, c'était pour dire qu'il faut pouvoir installer la jvm une première fois. Donc nécessité de compiler la jvm pour le processeur approprié. Ensuite, oui , plus besoin de compilation. ^^

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 22
    Points
    22
    Par défaut thx
    salut,

    Discussion très intéressent, chui de passage certes mais merci pour les infos, pour ma part le « interprété VS compilé » est désormais nettement plus clair.

    Bon courage à tous

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    Hi ! Et maintenant que c'est plus clair pour toi... Tu as un avis sur la question?

Discussions similaires

  1. [Time] comment calculer une différence entre deux Time?
    Par adil_vpb dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 13/03/2007, 17h02
  2. Réponses: 2
    Dernier message: 31/01/2007, 15h52
  3. faire une différence entre deux tables
    Par geay dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/09/2006, 15h33
  4. [Dates] Calcul d'une différence entre deux heures
    Par loreleï85 dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2006, 11h43
  5. Réponses: 1
    Dernier message: 14/06/2006, 14h25

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