¿PHP está compilado o interpretado?
142
PHP es un lenguaje interpretado. El binario que te permite interpretar PHP está compilado, pero lo que escribes se interpreta.
Puede ver más en la página de Wikipedia para Idiomas interpretados
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 formulario adecuado para el motor de tiempo de ejecución. Entre sus tareas:
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 script, 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 llama al script. La tabla de símbolos se usa para almacenar los valores de las variables y proporcionar las direcciones de código de bytes para las funciones.
Este proceso de compilación a bytecode e 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, incluidos Perl, Java, Ruby, Smalltalk y otros.
fuente
En general se interpreta, pero en algún momento puede usarlo como compilado y realmente aumenta el rendimiento. Herramienta de código abierto para realizar esta operación: hhvm.com
fuente
PHP es un lenguaje interpretado. Sin embargo, puede compilarse en bytecode mediante herramientas de terceros.
fuente
Un 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 los idiomas interpretados debe traducirse en tiempo de ejecución desde cualquier formato a las instrucciones de la máquina de la CPU. Esta traducción la realiza un intérprete.
No sería correcto decir que un lenguaje se interpreta o compila porque la interpretación y la compilación son propiedades de la implementación de ese lenguaje en particular y no una propiedad del lenguaje en sí. Por lo tanto, cualquier lenguaje se puede compilar o interpretar, solo depende de lo que haga la implementación particular que está utilizando.
La implementación de PHP más utilizada está impulsada por Zend Engine y se conoce simplemente como PHP. Zend Engine compila la fuente PHP en un formato que puede ejecutar, por lo que el motor Zend funciona como intérprete .
fuente
Esta es una pregunta sin sentido. PHP usa yacc (bison), al igual que GCC. yacc es un "compilador compilador". La salida de yacc es un compilador. La salida de un compilador se "compila". PHP es analizado por la salida de yacc. Entonces, por definición, se compila.
Si eso no satisface, considere lo siguiente. Tanto php (el binario) como gcc leen su código fuente y producen un árbol de sintaxis abstracta. 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 código de bytes traducido a códigos de operación (que son análogos al ensamblaje) usando el volquete lógico Vulcan . Finalmente, php (en particular, el motor Zend) interpreta el código de bytes. gcc, en comparación, recorre el árbol y genera 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 ya que PHP recompila mi código fuente para cada solicitud?", Etc.)
fuente
Sé que esta pregunta es antigua, pero está vinculada por todas partes y creo que todas las respuestas aquí son incorrectas (tal vez porque son viejas).
Hay NO tal cosa 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 en el bytecode intermedio de HipHop y luego se traduce en código de 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.
Una posible forma de delimitarlos es (no encuentro ningún significado en esta dicotomía):
los lenguajes compilados usan la compilación Ahead of Time (C, C ++);
los lenguajes interpretados utilizan la compilación Just in Time o ninguna compilación (Python, Ruby, PHP, Java).
fuente
in most cases
, sí. en todos los casos, no. así que no puede dibujar una línea que sea semánticamente significativa y acordada.Al menos no compila (o debería decir optimizar) el código tanto como uno podría desearlo.
Este código ...
... retrasa el programa por igual cada vez que se ejecuta.
Podría haber detectado que es un cálculo que solo debe hacerse la primera vez.
fuente
La respuesta aceptada es descaradamente falsa. PHP está compilado. Fin de la historia. Quizás no a las instrucciones nativas sino a un bytecode interpretado.
fuente