0

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?

+0

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

Répondre

1

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 :))

+1

"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

+0

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

+0

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. –

2

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.

+0

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

1

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.

+0

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