2010-10-01 8 views
7

Después de revisar algunos enlaces, me di cuenta de que Perl realiza la compilación y crea un código de bytes intermedio y luego interpreta ese código de bytes. Mi pregunta es ¿dónde reside ese código de bytes?¿Dónde almacena Perl su código de bytes intermedio?

Como en otro idioma como java, c podemos ver el código del objeto ejecutable de la máquina después de la compilación. Aunque Perl no crea el código ejecutable de máquina, pero debe haber alguna ubicación donde almacena temporalmente el código de bytes.

Respuesta

18

El resultado de la compilación se almacena en la memoria como un árbol de códigos de operación, o como opción para abreviar. Esta estructura está siendo procesada por el tiempo de ejecución de Perl para ejecutar su programa.

Es probable que encuentre el "Compiled Code" section of perlguts interesante. Explica muchos de los detalles de cómo crear y ejecutar un optree de perl.

También es una especie de posible escribir que optree a disco y cargarlo de nuevo en otro proceso Perl, utilizando la distribución B::C y el módulo ByteLoader contenida en ella. Sin embargo, esta técnica no funciona muy bien en muchos programas, por lo que no se recomienda de ninguna manera.

+0

¿Por casualidad sabes si undefing un espacio de nombres elimina los códigos op? –

2

Lo almacena en la memoria como AST.

+2

Si bien hay un trabajo emocionante, en su mayoría dirigido por Gerard Goosen, pasando a dar realmente un árbol de sintaxis abstracta perl, actualmente no tiene uno. – rafl

+2

Además, ¿por qué necesitarías un AST para el código de bytes? Un AST, ya que se trata de _Syntax_, solo es relevante para los lenguajes que tienen sintaxis real, p. Código fuente de Perl – MSalters

+2

Esto solo es válido para Perl 6. No para Perl 5. Además, AST no es lo que * almacena * el bytecode. Es lo que se puede usar para * generar * el bytecode. – dolmen

Cuestiones relacionadas