HipHop Virtual Machine ( HHVM ) es una máquina virtual de código abierto basada en compilación just-in-time (JIT) que sirve como motor de ejecución para el lenguaje de programación Hack . Al utilizar el principio de compilación JIT, el código Hack se transforma primero en código de bytes intermedio HipHop ( HHBC ), que luego se traduce dinámicamente a código de máquina x86-64 , se optimiza y se ejecuta de forma nativa. [7] [8] Esto contrasta con la ejecución interpretada habitual de PHP , en la que Zend Engine transforma el código fuente de PHP en códigos de operación que sirven como una forma de código de bytes y ejecuta los códigos de operación directamente en la CPU virtual de Zend Engine . [9]
HHVM es desarrollado por Meta , con el código fuente del proyecto alojado en GitHub ; [10] está licenciado bajo los términos de la Licencia PHP y la Licencia Zend . [1] [6]
HHVM fue creado como sucesor del motor de ejecución PHP HipHop para PHP (HPHPc), que es un transpilador de PHP a C++ también creado por Facebook. [11] [12] Basándose en la experiencia adquirida y con el objetivo de resolver los problemas introducidos por HPHPc, Meta decidió a principios de 2010 crear una máquina virtual PHP basada en JIT . Los problemas asociados con HPHPc incluían alcanzar una meseta para futuras mejoras de rendimiento, una incapacidad fundamental para soportar todas las características del lenguaje PHP y dificultades derivadas de procesos específicos de desarrollo e implementación que consumen tiempo y recursos. [11] En el primer trimestre de 2013, la versión de producción del sitio web facebook.com dejó de usar HPHPc y cambió a HHVM.
Siguiendo el principio de compilación JIT, HHVM primero convierte el código ejecutado en un lenguaje intermedio , el bytecode de alto nivel HHBC. HHBC es un formato de bytecode creado específicamente para HHVM, apropiado para el consumo tanto de intérpretes como de compiladores just-in-time. A continuación, HHVM traduce dinámicamente ("just-in-time") el HHBC en código de máquina x86-64, optimizado a través del análisis dinámico del bytecode traducido. Finalmente, ejecuta el código de máquina x86-64. [1] [11] [13] Como resultado, HHVM tiene ciertas similitudes con las máquinas virtuales utilizadas por otros lenguajes de programación, incluido Common Language Runtime (CLR, para el lenguaje C# ) y la máquina virtual Java (JVM, para el lenguaje Java ).
HHVM aporta muchas ventajas en comparación con HPHPc. HHVM utiliza el mismo motor de ejecución cuando se implementa en entornos de producción y desarrollo, a la vez que admite la integración entre el motor de ejecución y el depurador HPHPd en ambos tipos de entornos; como resultado, ya no es necesario mantener HPHPi (intérprete de HipHop) por separado como una utilidad de desarrollo, como era el caso con HPHPc. HHVM también elimina las largas compilaciones requeridas por HPHPc para ejecutar programas, lo que resulta en procesos de desarrollo e implementación mucho más simples que en el caso de HPHPc. [1] Finalmente, las versiones de HHVM anteriores a la 4.0 tienen soporte casi completo para todo el lenguaje PHP (como se define en la implementación oficial de la versión 5.4 de PHP), incluido el soporte para las construcciones y , lo que era imposible con HPHPc. [14] [15]create_function()
eval()
Junto con HHVM 3.0, [16] Meta también lanzó Hack , un derivado de PHP [17] [18] que permite a los programadores usar tanto tipado dinámico como tipado estático (un concepto también conocido como tipado gradual ), y permite especificar tipos para argumentos de función , valores de retorno de función y propiedades de clase . Sin embargo, Hack no proporciona compatibilidad completa con versiones anteriores ya que elimina varias características de PHP, como la declaración y los nombres de variables dinámicas . [19] [20] [21] [22]goto
En septiembre de 2017, se anunció que la versión 3.30 sería la última versión de HHVM que soportaría oficialmente PHP, y que HHVM solo soportaría Hack en el futuro. [23] Esto se debió a diferencias e incompatibilidades en PHP 7. [24] HHVM 4.0, lanzado en febrero de 2019, fue la primera versión sin soporte para PHP. [25]
Como máquina virtual de procesos que proporciona el entorno de ejecución, HHVM tiene la capacidad de utilizar información de tipos en vivo para producir código nativo más eficiente , lo que genera un mayor rendimiento del servidor web y una menor latencia . En el cuarto trimestre de 2012, la ejecución del código fuente de facebook.com en HHVM alcanzó la paridad de rendimiento con HPHPc, [11] y en diciembre de 2013, HPHPc incluso fue superado en alrededor del 15 %. [26]