2009-10-03 71 views

Respuesta

97

Se interpreta el lenguaje PHP. Se compila el binario que le permite interpretar PHP, pero se interpreta lo que escribe.

Puede ver más on the wikipedia page for Interpreted languages

+0

¿qué quieres decir con Se compila el binario que te permite interpretar PHP? – nicky

+15

Quiere decir que se compila la utilidad llamada php (o en Windows php.exe). – sepp2k

+6

@nicky Significa que se compila el programa que se usa para interpretar PHP, pero se interpreta el PHP en sí mismo. –

12

PHP es un lenguaje interpretado. Sin embargo, puede compilarse a bytecode con herramientas de terceros.

+1

"bytecode" es un término usado para las pseudoinstrucciones específicas de VM, que no son nativas, por lo que no pueden considerarse como "compilación" en este contexto. –

+4

"código de objeto" es solo un código de bytes para el decodificador de instrucciones de la CPU. (No cree que las CPU realmente tengan instrucciones nativas como "CMPSB", ¿verdad?) – jrockway

0

Es interpretado. Así que tenlo en cuenta cuando pones demasiados comentarios en tu código ...

+1

Esta respuesta hubiera sido cierta para BASIC. –

+1

¿Por qué -3? Esta respuesta es verdadera, incluso para php. El análisis de si una instrucción es un comentario solo lleva una cantidad de tiempo no significativa. – Atmocreations

+0

Acepta el golpe solo la primera vez que se utiliza su secuencia de comandos. –

4

Esta es una pregunta sin sentido. PHP usa yacc (bison), al igual que GCC. yacc es un "compilador de compilador". La salida de yacc es un compilador. La salida de un compilador es "compilada". PHP es analizado por la salida de yacc. Entonces es, por definición, compilado.

Si eso no satisface, considere lo siguiente. Tanto php (el binario) como gcc leen su código fuente y producen un árbol sintáctico abstracto. En las versiones 4 y 5, php luego recorre el árbol para traducir el programa a bytecode (el paso de compilación). Puede ver el bytecode traducido a los códigos de operación (que son análogos al ensamblaje) usando el Vulcan Logic Dumper. Finalmente, php (en particular, el motor Zend) interpreta el bytecode. gcc, en comparación, camina por el árbol y produce el ensamblaje; también puede ejecutar ensambladores y enlazadores para finalizar el proceso. Llamar a un programa manejado por uno "interpretado" y otro programa manejado por el otro "compilado" no tiene sentido. Después de todo, los programas se ejecutan a través de un "compilador" con ambos.

En realidad, debería hacer la pregunta que desea hacer en su lugar. ("¿Pago una penalización de rendimiento a medida que PHP recompila mi código fuente para cada solicitud?", Etc.)

+4

Tokenizar un código fuente no está compilando. Incluso VBScript se puede considerar como un lenguaje compilado con su definición. –

+0

Esto significa que la palabra "compilado" no tiene sentido. Además, Lex es el tokenizador; yacc opera en los tokens que flex emite. (¿Alguna vez ha implementado un lenguaje de programación?) – jrockway

+3

Estoy con jrockway en esto, aunque realmente no responde la pregunta del OP. Es tentador crear una taxonomía de idiomas en la que cada idioma se ubique limpiamente en cada categoría. Pero la realidad no es tan clara. Casi todos los idiomas son una combinación de características. Además, cuando llegue a eso, el procesador incluso "interpreta" el código máquina nativo. –

16

En general se interpreta, pero en algún momento puede usarse como compilado y realmente aumenta el rendimiento. Herramienta de código abierto para realizar esta operación: http://www.phpcompiler.org/

+6

También puedo agregar http://hhvm.com – JohnnyQ

44

Ambos. PHP se compila en un bytecode intermedio que luego es interpretado por el motor de tiempo de ejecución.

El trabajo del compilador PHP es analizar su código PHP y convertirlo en un formato adecuado para el motor de tiempo de ejecución. Entre sus tareas:

  • ignorar los comentarios
  • variables de resolución, los nombres de función, y así sucesivamente y crear la tabla de símbolos
  • construir el árbol de sintaxis abstracta de su programa
  • Escribir el código de bytes

Dependiendo de su configuración de PHP, este paso generalmente se realiza solo una vez, la primera vez que se llama al script. La salida del compilador se almacena en caché para acelerar el acceso en usos posteriores. Sin embargo, si se modifica el guión, el paso de compilación se realiza nuevamente.

El motor de tiempo de ejecución recorre el AST y el código de bytes cuando se invoca el script. La tabla de símbolos se utiliza para almacenar los valores de las variables y proporcionar las direcciones de bytecode para las funciones.

Este proceso de compilación para el bytecode y la interpretación en tiempo de ejecución es típico para los lenguajes que se ejecutan en algún tipo de máquina de tiempo de ejecución virtual, incluyendo Perl, Java, Ruby, Smalltalk y otros.

+0

La vinculación de variables ocurre en tiempo de ejecución, no en tiempo de compilación. – jrockway

+0

PHP ni siquiera intenta resolver qué nombres están dentro del alcance en tiempo de compilación? –

0

La categorización tradicional de compiladores e intérpretes es borrosa en el caso de compilación justo a tiempo e interpretación de bytecode.PHP se interpreta. Pero eso no significa que PHP no se haya compilado. El compilador dePHP realiza la comprobación de sintaxis, generación de código intermedio y optimización .PHP se interpreta porque el código objeto que genera el compilador PHP es analizado por otro binario nativo precompilado. Lo que interpreta el código intermedio como instrucción legible por CPU. Esto explica por qué ningún otro idioma puede ser tan primero como el lenguaje ensamblador en términos de ejecución de instrucción. Porque Las instrucciones que un ensamblador (compilador ensamblador) produce ya están allí en la CPU.

2

Al menos no compila (o debería decir optimizar) el código tanto como uno podría desearlo.

Este código ...

for($i=0;$i<100000000;$i++); 
echo $i; 

... retrasa el programa por igual tanto cada vez que se ejecuta.

Pudo haber detectado que es un cálculo que solo debe hacerse la primera vez.

+0

Ahora tenemos una opción llamada generadores. –

0

Se interpreta como el código PHP es interpretado por un motor (comúnmente convertido en bytecode primero); también se compila ya que algunas herramientas pueden compilar código PHP en el ejecutable, como phc.

4

A código compilado puede ser ejecutado directamente por la CPU de la computadora. Es decir, el código ejecutable se especifica en el idioma nativo de la CPU

El código de lenguajes interpretados debe traducirse en tiempo de ejecución de cualquier formato a instrucciones de la máquina de la CPU. Esta traducción es hecha por un intérprete.

No sería correcto decir que una lengua se interpreta o compila porque la interpretación y compilación son ambos propiedades de la aplicación de ese idioma en particular, y no una propiedad de la lengua sí. Entonces, cualquier lenguaje puede ser compilado o interpretado, solo depende de lo que haga la implementación particular que está usando.

La aplicación PHP más utilizado es accionado por el motor de Zend y conocido simplemente como PHP.The motor de Zend PHP compila la fuente en un formato que se puede ejecutar, por lo tanto el motor Zend funciona como un intérprete .

Gracias :)

+1

"* Es decir, el código ejecutable se especifica en el idioma nativo de la CPU *" .. El código ejecutable no se especifica en ** idioma nativo de la CPU ** pero en formato binario, el idioma nativo de la CPU puede ser cualquier cosa y cuando los binarios de software no lo hacen Viene como es para esta CPU o esa CPU. Un código completamente compilado y ejecutable estará en formato binario. – hagrawal

5

No es preciso decir que un lenguaje interpretado o compilado es porque la interpretación y compilación son las propiedades de la aplicación de ese idioma en particular, y no una propiedad del lenguaje mismo. Entonces, en teoría, cualquier lenguaje puede ser compilado o interpretado, solo depende de lo que haga la implementación particular que está utilizando.

3

Sé que esta pregunta es antigua pero está vinculada por todas partes y creo que todas las respuestas aquí son incorrectas (quizás porque son viejas).

Hay NO tal como un lenguaje interpretado o un lenguaje compilado. Cualquier lenguaje de programación puede ser interpretado y/o compilado.

En primer lugar, un lenguaje es solo un conjunto de reglas, por lo que cuando hablamos de compilación nos referimos a implementaciones específicas de ese lenguaje.

HHVM, por ejemplo, es una implementación de PHP. Utiliza la compilación JIT para transformar el código a bytecode HipHop intermedio y luego se traduce en código máquina. ¿Es suficiente decir que está compilado? Algunas implementaciones de Java (no todas) también usan JIT. El V8 de Google también usa JIT.

Usar las antiguas definiciones de compilado vs. interpretado no tiene sentido hoy en día.

"¿Está compilado PHP?" es una pregunta no sensorial dado que no hay delimitadores claros y acordados más largos entre lo que es un lenguaje compilado versus un interpretado .

Una forma posible delimitar ellos es (no encuentro ningún sentido a esta dicotomía):

lenguajes compilados uso Ahead de compilación Tiempo (C, C++);

idiomas interpretados use compilación Just in Time o no compilación en absoluto (Python, Ruby, PHP, Java).

+0

¿No usa Java la compilación anticipada en la mayoría de los casos? Soy un desarrollador de Java bastante nuevo y usualmente compilamos nuestro código antes del tiempo de ejecución. – aCarella

+0

@aCarella 'en la mayoría de los casos', sí. en todos los casos, no. por lo que no puede trazar una línea que sea semánticamente significativa y aceptada. –

0

Obviamente php.exe (el intérprete PHP) es un ejecutable compilado.

Sin embargo, no creo que sea eso lo que usted pidió.

Cuando se carga un script PHP, obtiene compilado en un formato binario conocido como códigos de operación Zend, en la memoria, que luego se interpretan de manera eficiente.

Fuente: https://stackoverflow.com/a/18595821/3881189

1

PHP es un lenguaje interpretado pero el programa utilizado para interpretar PHP es cumplió.

PHP compilador genera el código de bytes que es independientes de la máquina a finales de este código de bytes convierte en código máquina comprensible por plazo motor de tiempo.

0

php es un intérprete, no lo compila, lo guarda en un archivo y el servidor lo lee línea por línea. C++ se compila, compila todo el script y luego ejecuta el programa exe, your. Demasiado tarde para hacer cambios ahora.

Cuestiones relacionadas