• [^] # Re: Félicitations !

    Posté par (Mastodon) . En réponse à la dépêche Balazar 0.1. Évalué à 6.

    «Donc tout langage interprété est un langage à machine virtuelle, car introduisant un niveau de "virtualisation" ? Ca me parait un peu fort... J'avais plutôt l'idée d'une machine virtuelle qui encapsule totalement les supports matériels sur lesquels elle est lancée, fournissant ainsi une interface et un comportement identique pour toute implémentation»

    En fait, ta définition d'une machine virtuelle est en réalité la définition d'une interface, et elle s'applique à n'importe quel traducteur d'un langage vers un autre. Quand on programme dans un langage, même en C, on se fiche de savoir si la machine sur laquelle le programme sera exécuté est réellement ce qu'elle semble être. La seule chose importante est que le compilateur ou l'interpréteur fait en sorte que l'implémentation réelle de la machine nous soit invisible, et que la machine semble donc se comporter comme le langage la décrit.

    On a donc toujours plus ou moins une machine virtuelle quelque part. Quand on parle de langage à machine virtuelle, par opposition aux "autres" langages, c'est essentiellement pour dire que la machine virtuelle est simulée par la machine réelle pendant que le programme est exécuté, par opposition aux langages pour lesquels on a un traducteur de la machine virtuelle vers la machine réelle qui fait la traduction une bonne fois pour toute. Donc les langages interprétés sont, effectivement, des langages à machine virtuelle.

    Je pense que ce qui te gêne est simplement le fait que Java est un langage qui utilise deux machines virtuelles (en général). On a d'une part la machine virtuelle Java, et d'autre part le langage qui est lui aussi une machine virtuelle, de plus haut niveau. On a un traducteur de Java-le-langage vers Java-la-MV, et ensuite on a simulation de Java-la-MV pour exécuter le programme.