Pregunta

¿Por qué pitón compilar el código fuente a código de bytes antes de interpretar?

¿Por qué no interpretar directamente de la fuente?

¿Fue útil?

Solución

Casi ningún intérprete realmente interpreta el código directamente , línea por línea - es simplemente demasiado ineficientes. Casi todos los intérpretes utilizan alguna representación intermedia que puede ser ejecutado fácilmente. También, pequeñas optimizaciones se pueden realizar en este código intermedio.

Además de Python almacena este código que tiene una enorme ventaja para la próxima vez que este código es ejecutado: Python no tiene que analizar el código más; análisis sintáctico es la parte más lenta en el proceso de compilación. Por lo tanto, una representación bytecode reduce la sobrecarga de ejecución muy sustancialmente.

Otros consejos

Debido a que se puede compilar a un .pyc vez e interpretar de ella muchas veces.

Así que si se está ejecutando un script muchas veces es suficiente con la sobrecarga de analizar el código fuente de una vez.

Debido interpretting de código de bytes directamente es más rápido. Evita la necesidad de hacer léxico, por una cosa.

Re-léxico y analizar el código fuente una y otra vez, en lugar de hacerlo sólo una vez (con mayor frecuencia en la primera import), obviamente, sería una pérdida tonta y sin sentido del esfuerzo.

A pesar de que hay un pequeño aspecto de eficiencia a ella (se puede almacenar el código de bytes en el disco o en la memoria), la mayor parte de ingeniería: Permite separar el análisis de la interpretación. Analizadores a menudo pueden ser criaturas desagradables, llenos de casos de borde y tener que ajustarse a las normas esotéricos como el uso de la cantidad justa de búsqueda hacia delante y resolver problemas de reducción por desplazamiento. Por el contrario, la interpretación es muy simple:. Es sólo una instrucción switch grande usando código de operación del código de bytes

Dudo mucho que la razón es el rendimiento, aunque se trate de un efecto secundario interesante. Yo diría que es natural pensar de una máquina virtual construido en torno a algunos de lenguaje ensamblador de alto nivel sería más práctico que buscar y reemplazar texto en alguna cadena de código fuente.

Editar:

De acuerdo, con claridad, que alguna vez pon un contador -1 votación sobre mi post sin dejar un comentario razonable para explicar lo sabe muy poco acerca de las máquinas virtuales (entornos de tiempo de ejecución).

http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Erik-Meijer-and-Lars-Bak-Inside-V8-A-Javascript- virtual-máquina /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top