¿Por qué Python comstack la fuente a bytecode antes de interpretar?

¿Por qué Python comstack la fuente a bytecode antes de interpretar?

¿Por qué no interpretar desde la fuente directamente?

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

Python además almacena este código que tiene una gran ventaja para la próxima vez que se ejecute este código: Python ya no tiene que analizar el código; el análisis es la parte más lenta en el proceso de comstackción. Por lo tanto, una representación de bytecode reduce sustancialmente la sobrecarga de ejecución.

Porque puedes comstackr en un .pyc una vez e interpretarlo muchas veces.

Entonces, si está ejecutando un script muchas veces, solo tiene la sobrecarga de analizar el código fuente una vez.

Porque interpretar directamente desde el bytecode es más rápido. Evita la necesidad de hacer lexing, por una cosa.

Reexplicar y analizar el código fuente una y otra vez, en lugar de hacerlo solo una vez (la mayoría de las veces en la primera import ), obviamente sería una pérdida de esfuerzo tonta e inútil.

Aunque tiene un pequeño aspecto de eficiencia (puede almacenar el bytecode en el disco o en la memoria), es principalmente de ingeniería: le permite analizar por separado de la interpretación. Los analizadores a menudo pueden ser criaturas desagradables, llenas de casos de borde y tener que ajustarse a reglas esotéricas como usar la cantidad justa de lookahead y resolver problemas de reducción de turnos. Por el contrario, la interpretación es realmente simple: es solo una statement de cambio grande que utiliza el código de operación del código de bytes.

Dudo mucho que la razón sea el rendimiento, aunque sea un buen efecto secundario. Diría que es natural pensar que una máquina virtual basada en un lenguaje ensamblador de alto nivel sería más práctica que encontrar y reemplazar texto en alguna cadena de código fuente.

Editar:

De acuerdo, claro, quien haya hecho un voto -1 en mi publicación sin dejar un comentario razonable para explicar 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-Machine/