Question

Pourquoi python compiler la source à bytecode avant d'interpréter?

Pourquoi ne pas interpréter directement de la source?

Était-ce utile?

La solution

Presque pas d'interprète interprète vraiment le code directement , ligne par ligne - il est tout simplement trop inefficace. Presque tous les interprètes utilisent une représentation intermédiaire qui peut être exécuté facilement. En outre, les petites optimisations peuvent être effectuées sur ce code intermédiaire.

Python mémorise en outre ce code qui a un énorme avantage pour la prochaine fois que ce code est exécuté: Python ne doit pas analyser le code plus; l'analyse syntaxique est la partie la plus lente dans le processus de compilation. Ainsi, une représentation de bytecode réduit les frais généraux d'exécution tout à fait substantielle.

Autres conseils

Parce que vous pouvez compiler à une .pyc une fois et d'interpréter de nombreuses fois.

Donc, si vous utilisez un script plusieurs fois que vous avez les frais généraux de l'analyse syntaxique une fois que le code source.

Parce que interpretting de bytecode est plus rapide directement. Il évite la nécessité de faire lexing, pour une chose.

Re-lexing et l'analyse syntaxique du code source sur et plus, plutôt que de le faire une seule fois (le plus souvent sur la première import), serait évidemment un gaspillage stupide et inutile d'effort.

Bien qu'il y ait un aspect petit à l'efficacité (vous pouvez stocker le bytecode sur le disque ou en mémoire), la plupart du temps d'ingénierie: il vous permet d'interpréter séparez l'analyse syntaxique. Parseurs peuvent souvent être méchantes créatures, pleines de bord et ayant des cas de se conformer aux règles ésotériques comme l'utilisation juste la bonne quantité de résolution et préanalyse décalage à réduire les problèmes. En revanche, l'interprétation est très simple:. Est juste une déclaration de grand commutateur à l'aide de opcode du bytecode

Je doute fort que la raison est la performance, bien que ce soit un bel effet. Je dirais qu'il est naturel de penser une machine virtuelle construit autour d'un langage d'assemblage de haut niveau serait plus pratique que de trouver et remplacer du texte dans une chaîne de code source.

Edit:

D'accord, clairement, qui a jamais mis -1 vote sur mon poste sans laisser un commentaire raisonnable pour expliquer sait très peu de choses sur les machines virtuelles (environnements temps run).

http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Erik-Meijer-and-Lars-Bak-Inside-V8-A-Javascript- Virtual machine /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top