Pregunta

¿Se compila o interpreta Perl?

¿Fue útil?

Solución

Bueno, eso depende de lo que quieras decir con un lenguaje compilado. Tal vez es por eso que Googling no presentó una respuesta clara a su pregunta.

Un punto de vista es que la compilación significa compilar de una descripción del código fuente a otro, es decir codigo de GENERACION.

Si aceptamos estas instalaciones, entonces Perl 6 puede ser compilado y Perl de 5 años o más son idiomas interpretados.

Perl 6 se compila específicamente para Bytecode de loro. Perl 6 es, por lo tanto, un lenguaje compilado adecuadamente, de la misma manera, digamos, Java es.

Perl 5 y más analiza el código fuente de Perl a una lista o árbol interno, pero no creo que deba llamarse un compilador adecuado, excepto tal vez en un sentido teórico. No genera ningún código de bytecode, ensamblaje o máquina real generalmente asociado con compiladores. La etapa de análisis de Perl para verificar la sintaxis de Perl solía llamarse "compilar" la fuente. Se utiliza para verificar la validez sintáctica de un archivo fuente de Perl sin ejecutarlo.

Se invoca como:

perl -c myprog.pl

Pero si observa la ayuda para las opciones de Perl, -c en realidad representa "verificar".

-c                check syntax only (runs BEGIN and CHECK blocks)

(Para complicar aún más las cosas, Perl 5 tenía apoyo para escribir el código de bytes interno, pero fue eliminado en la versión 5.10. Presumiblemente porque era buggy, no lo sé).

Por otra parte, si argumenta que la compilación es el acto de analizar un árbol de origen en cualquier otro tipo de representación, bueno, que el análisis hace de Perl un lenguaje compilado. Perl debe analizar completamente un archivo de origen antes de que pueda comenzar a ejecutarlo. Según esta definición, cualquier idioma que pueda comenzar a ejecutar un archivo fuente inmediatamente antes de la analización sería un lenguaje interpretado.

Una tercera vía Mirar esto es de cómo estas palabras, "interpretadas" y "compiladas" son utilizadas con mayor frecuencia por profesionales en el campo. Apuesto a que un buen dinero que si se pidiera a un subconjunto aleatorio de programadores que eligieran "compilados" o "interpretados" al pensar en Perl, la mayoría elegiría "interpretado". No por algún argumento teórico sobre la naturaleza de Perl, sino porque "compilado" generalmente invoca pensamientos de "compilar", "vincular", "código de objeto", etc., mientras que "interpretado" se toma como "escribir el código, pruébalo ". Correcto o incorrecto, puede ser bueno saber al tratar de determinar si Perl es, realmente, interpretado o de hecho, compilado. Vas a encontrar muchos argumentos en tu búsqueda.

Otros consejos

No vas a obtener una respuesta definitiva, porque no has proporcionado una pregunta definitiva.

Perl siempre está en uno de los dos estados: se está compilando o se está ejecutando. Es por eso que ves hablar de "en tiempo de compilación" frente a "en tiempo de ejecución". Normalmente, obtienes una frase de compilación seguida de una fase de ejecución, pero no es necesario que sea así.

Estas dos fases también pueden negociar de un lado a otro. Un eval STRING es una forma de que el intérprete llame al compilador (por lo tanto, por lo tanto, son do FILE y require). A BEGIN el bloque es una forma para que el compilador llame al intérprete (por lo tanto, por lo tanto, son use y no).

Cuando corres perl -c, omite la fase de tiempo de ejecución. Hay varias formas de omitir la fase de tiempo de compilación, pero ninguna de ellas es particularmente conveniente o común. Apache mod_perl Solo compila scripts una vez, pero los ejecuta muchas veces. Si usa el byteloader, puede hacer lo mismo. Etcétera.

La respuesta correcta a si Perl está compilado o interpretado es simplemente SÍ.

Ambos, de verdad. Perl5 compila el código fuente en un código de operación, luego interpreta los objetos de código de operación. Larga respuesta sigue.


De Wikipedia,

Un compilador es un programa de computadora (o conjunto de programas) que transforma el código fuente escrito en un lenguaje de programación (el lenguaje de origen) en otro lenguaje de computadora (el lenguaje de destino, a menudo con un formulario binario conocido como código de objeto).

Según esa definición, Perl5 es un compilador. Toma el código fuente de Perl5 y produce un gráfico de objetos de código de operación.

$ perl -MO=Concise,-exec -E'for (1..3) { say "Hello, World!" }'
1  <0> enter 
2  <;> nextstate(main 48 -e:1) v:%,2048
3  <0> pushmark s
4  <$> const(IV 1) s
5  <$> const(IV 3) s
6  <$> gv(*_) s
7  <{> enteriter(next->c last->f redo->8) lKS/8
d  <0> iter s
e  <|> and(other->8) vK/1
8      <;> nextstate(main 47 -e:1) v:%,2048
9      <0> pushmark s
a      <$> const(PV "Hello, World!") s
b      <@> say vK
c      <0> unstack v
           goto d
f  <2> leaveloop vK/2
g  <@> leave[1 ref] vKP/REFC
-e syntax OK

Sin embargo, el compilador Perl5 no produce código de máquina. Entonces, ¿cómo se ejecuta el gráfico Opcode? De Wikipedia, una definición para un intérprete es algo que

Ejecuta explícitamente el código precompilado almacenado realizado por un compilador que forma parte del sistema de intérprete

Eso significa que se interpreta los gráficos de código de operación.

El trabajo está disminuyendo para proporcionar la opción de compilar Perl5 a LLVM bytecode. Esto, a su vez, se puede compilar en el código de la máquina. Este es el mismo enfoque que usa Java.

Perl es un lenguaje interpretado. Sin embargo, se compila internamente en el código P para la eficiencia.

De Wikipedia: "Perl es un nivel general de alto nivel, interpretado, lenguaje de programación dinámica ". Perl 6 permite también para compilar (nuevamente, ver Wikipedia).

Ambas cosas. Primero, el script Perl 6 se compila en Bytecode (y optimizado). Luego se ejecuta (sin embargo, aún necesita Perl Interpreter para esto). Bytecode es una especie de código ejecutable, que es independiente del entorno en el que se ejecuta (el mismo bytecode puede ejecutarse en unix entorno en el procesador ARM, el sistema de Windows con x86 y haiku en x64).

Perl 6 se puede compilar a Bytecode de Parrot VM (Máquina virtual). Parrot VM es utilizado por Python y Ruby también.

Esto es lo que hace que Perl, Ruby y Python más rápido que PHP, que se acaba de interpretar (también se puede compilar, pero necesita componentes de terceros para esto).

La mayoría de las veces se interpretan pero también puede ser compilada.Acerca del compilador de Perl

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