# HHVM

HipHop Virtual Machine (HHVM) es una máquina virtual de código abierto basada en la compilación Just-In-Time (JIT) que sirve como motor de ejecución para el lenguaje de programación Hack, y se utiliza para admitir la ejecución de PHP antes del lanzamiento de la versión 4 de HHVM. Al utilizar el principio de compilación JIT, el código Hack se transforma primero en bytecode HipHop intermedio (HHBC), que luego se traduce dinámicamente en código máquina x86-64, se optimiza y se ejecuta de forma nativa. Esto contrasta con la ejecución interpretada habitual de PHP, en la que Zend Engine transforma el código fuente de PHP en código de operación que sirve como una forma de bytecode, y ejecuta los códigos de operación directamente en la CPU virtual de Zend Engine.
HHVM es desarrollado por Facebook, con el código fuente del proyecto alojado en GitHub; está licenciado bajo los términos de la Licencia PHP y la Licencia Zend.

## Visión general

HHVM fue creado como el sucesor del motor de ejecución PHP HipHop para PHP (HPHPc), que es un transpilador de PHP a C++ también creado por Facebook. Sobre la base de la experiencia adquirida y con el objetivo de resolver los problemas introducidos por HPHPc, Facebook decidió a principios de 2010 crear una máquina virtual PHP basada en JIT. Los problemas asociados con HPHPc incluyeron su alcance de una meseta para mejoras de rendimiento adicionales, la falta de soporte completo para todas las características del lenguaje PHP y las dificultades que surgen de procesos específicos de desarrollo e implementación que consumen tiempo y recursos necesarios para proyectos PHP que utilizan HPHPc. 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 PHP o Hack ejecutado en un bytecode de alto nivel, HHBC, que también se conoce como lenguaje intermedio. HHBC es un formato de código de bytes creado específicamente para HHVM, en una forma que es apropiada para el consumo tanto de los intérpretes como de los compiladores just-in-time. Como pasos siguientes en la ejecución, HHVM traduce dinámicamente el bytecode HHBC en código máquina x86-64, realiza sus optimizaciones adicionales mediante un análisis dinámico del bytecode traducido y ejecuta el código de máquina x86-64. 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 ofrece muchos beneficios en comparación con HPHPc, y uno de ellos es el soporte casi completo para todo el lenguaje PHP según lo define la implementación oficial de PHP versión 5.4, incluido el soporte de HHVM para las construcciones create_function y eval. Además, HHVM utiliza el mismo motor de ejecución cuando se implementa tanto en entornos de producción como de desarrollo, mientras que admite la integración entre el motor de ejecución y el depurador HPHPd en ambos tipos de entornos; como resultado, mantener HPHPi (intérprete de HipHop) por separado como una utilidad de desarrollo ya no es necesario como era el caso de HPHPc. HHVM también elimina las compilaciones largas requeridas por HPHPc para ejecutar programas PHP, lo que resulta en procesos de implementación y desarrollo mucho más simples que en el caso de HPHPc.
Junto con HHVM, Facebook también lanzó Hack, un lenguaje derivado de PHP que permite a los programadores usar tanto la escritura dinámica como la escritura estática, que es un concepto también conocido como escritura gradual, y permite especificar tipos para argumentos de función., valores de retorno de funciones y propiedades de clase; sin embargo, no se pueden especificar tipos de variables locales. Al mismo tiempo, Hack no proporciona una compatibilidad retroactiva completa al no llevar a cabo algunas de las características de PHP, como la instrucción goto y los nombres de las variables dinámicas.
En septiembre de 2017, se anunció que la versión 3.24 sería la última versión de HHVM en admitir oficialmente PHP, y que HHVM solo admitirá Hack en el futuro, citando diferencias e incompatibilidades en PHP 7.

## Rendimiento

Como máquina virtual de proceso que proporciona el entorno de ejecución, HHVM tiene la capacidad de utilizar información de tipo en vivo para producir código nativo más eficiente, lo que lleva a un mayor rendimiento del servidor web y una menor latencia. En el cuarto trimestre En 2012, la ejecución del código fuente de facebook.com en HHVM logró la paridad de rendimiento con HPHPc, y en diciembre de 2013 HPHPc fue incluso superada en alrededor de un 15%.
Al momento del lanzamiento de PHP 7, varios estudios de rendimiento demostraron que el rendimien PHP 7 era equiparable al de HHVM v3.30 (en un incremento de rendimiemto considerablecomparado con PHP 5.6). Varios de los sitios y software que se cambiaron a HHVM durante su auge (entre ellos WordPress y MediaWiki), decidieron regresar a PHP 7, motivado principalmente por el anuncio del fin de soporte al lenguaje PHP por parte de HHVM.

## Adopción

Varios sitios web y software, al ver los beneficios en rendimiento de HHVM en su época, decidieron entregar soporte para dicho motor.
A fines del 2014, la fundación Wikimedia publicó un estudio a cerca del rendimiento de MediaWiki frente a PHP 5.6. Durante ese año, se agregó el soporte para HHVM en el software MediaWiki. Tras el lanzamiento de PHP 7 y el anuncio del fin de soporte a PHP por parte de HHVM en 2017, los desarrolladores de MediaWiki decidieron dejar de lado el soporte a HHVM, y los servidores de Wikimedia regresaron a PHP.