Si je comprends bien ce que j'ai lu, une machine virtuelle est essentiellement un compilateur de code intermédiaire. Mais il n'est jamais dit que Delphi (en tant qu'exemple de code non géré) s'exécute dans son compilateur. Serait-il moins déroutant de décrire une machine virtuelle en tant que compilateur?Est-il trompeur de dire que le code intermédiaire s'exécute dans une machine virtuelle?
Répondre
Il y a un compilateur qui traduit le code source en code VM (bytecode), et un compilateur JIT pour le code VM -> code machine. La VM est la norme que le compilateur de code source -> VM cible, pas nécessairement l'implémentation spécifique. Il pourrait être implémenté avec une machine réelle, auquel cas il n'aurait pas besoin de faire de compilation JIT.
Une machine virtuelle est plus proche d'un émulateur (ou si votre JIT est vraiment stupide, un interprète :))
"La VM est la norme" Je préfère cette façon de voir, c'est-à-dire comme une spécification de langage pour un langage intermédiaire. – culchie
Mais le code intermédiaire étant plus proche du code machine (que le code source) s'exécute sur une machine virtuelle inférieure au code source de haut niveau (qui ne fonctionnera que dans votre tête!) – culchie
Pas nécessairement. Les interprètes exécutent également le code source. Ils devront peut-être couper quelques fois pour les digérer, mais ils continueront à exécuter le code directement, sans étape de compilation explicite. –
Un compilateur traditionnel effectue une conversion unique du code source au code objet. Une machine virtuelle comme la JVM utilise un mélange de interpretation (de bytecode) et un just-in-time compiler qui compile des segments de bytecode en code natif. Il n'est pas correct de décrire une machine virtuelle en tant que compilateur.
Un mélange d'un interpréteur et d'un compilateur avec la métaphore de la machine utilisée uniquement pour indiquer que c'est un processus continu, peut-être? – culchie
Je pense que ce que les gens essaient de saisir la terminologie est qu'il ya une couche d'abstraction supplémentaire avec virtuelle Machines. Donc, le même code, mais la VM pour chaque plate-forme lui permet de fonctionner sur cette plate-forme spécifique.
Encore une fois c'est probablement parce que je ne comprends pas tout à fait mais quelque chose comme le code partiellement assemblé et l'interpréteur final-compilateur semble fonctionner mieux pour moi – culchie
Vous avez tort. Un compilateur est un compilateur. Une machine virtuelle est un nom sophistiqué pour un interprète. Rien ne fonctionne dans son compilateur. – EJP