Estoy trabajando en mi propio lenguaje de programación de juguetes. Por ahora estoy interpretando el lenguaje de origen de AST y me pregunto qué ventajas puedo obtener al compilar un código de bytes y luego interpretarlo.¿Cuáles son las motivaciones detrás de compilar a byte-code?
Por ahora tengo tres cosas en mente:
- recorrer el árbol de sintaxis cientos de tiempo puede ser más lenta que la ejecución de instrucciones en una matriz, especialmente si el soporte de regleta de O (1) de acceso aleatorio (es decir. saltando 10 instrucciones arriba y abajo).
- En el entorno de ejecución tipeado, tengo algunos costos de tiempo de ejecución porque mi AST está tipeado, y lo estoy recorriendo constantemente (es decir, tengo 10 tipos de nodos y necesito verificar de qué tipo estoy ahora para ejecutar). Tal vez la compilación de un código de bytes sin tipo podría ayudar a mejorar esto, ya que después de la verificación de tipos y la compilación, tendría un código y valores sin tipo.
- La compilación del código de bytes puede proporcionar una mejor portabilidad.
¿Son correctos mis puntos? ¿Cuáles son algunas otras motivaciones detrás de la compilación de bytecode?
Al ejecutar en un intérprete aumenta la portabilidad de su código – Luis
@Luis, si esto ya estaba en mi mente, olvidé agregar ... – sinan
@Luis: eso es falso. Los AST serializados se pueden hacer igualmente portátiles. Bytecode puede de hecho no ser portátil; El bytecode de Python es específico para cada versión del intérprete. –