HHVM
HHVM | |||||
---|---|---|---|---|---|
Información general | |||||
Tipo de programa | máquina virtual | ||||
Desarrollador | Facebook, Inc. | ||||
Licencia | PHP License and Zend License[1] | ||||
Información técnica | |||||
Programado en | |||||
Versiones | |||||
Última versión estable | 4.172.02 de noviembre de 2022 | ||||
Lanzamientos | |||||
| |||||
Enlaces | |||||
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.[6] 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.[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ó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.[9]
HHVM es desarrollado por Facebook, 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.
Visión general
[editar]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.[11][12] 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.[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 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()
.[14][15] 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[16] 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.[17][18][19][20]
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.[21]
Rendimiento
[editar]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,[11] y en diciembre de 2013 HPHPc fue incluso superada en alrededor de un 15%.[22]
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).[23] Varios de los sitios y software que se cambiaron a HHVM durante su auge (entre ellos WordPress y MediaWiki),[24][25] decidieron regresar a PHP 7, motivado principalmente por el anuncio del fin de soporte al lenguaje PHP por parte de HHVM.[26]
Adopción
[editar]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.[23][24] 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.[27]
Véase también
[editar]Referencias
[editar]- ↑ «facebook/hhvm: License». github.com. Facebook, Inc. Consultado el 2014-08-02 de mdy.
- ↑ «Building and installing HHVM on CentOS 7.x». github.com. Facebook. 2015-05-26 de mdy. Consultado el 2015-06-12 de mdy.
- ↑ «Building the Hack typechecker». github.com. Facebook. 2014-09-10 de mdy. Consultado el 2015-06-12 de mdy.
- ↑ Only the Hack's type-checking (hh_server and hh_client) and code-formatting (hh_format) command-line utilities and daemons bundled together with the HipHop Virtual Machine are written in OCaml.
- ↑ «Facebook's HHVM Begins Seeing Rust Rewrite - Phoronix». Consultado el 29 de agosto de 2019.
- ↑ Fred Emmott (11 de febrero de 2019). «HHVM 4.0.0». hhvm.com (en inglés).
- ↑ . 2018-06-20 de mdy. pp. 151-165. Falta el
|título=
(ayuda) - ↑ «facebook/hhvm». github.com. Facebook. Consultado el 2014-08-02 de mdy.
- ↑ Kaushik Pal (2014-04-28 de mdy). «PHP and Zend Engine Internals». phpbuilder.com. Archivado desde el original el 15 de septiembre de 2014. Consultado el 2014-09-23 de mdy.
- ↑ HHVM source code on GitHub
- ↑ a b c Drew Paroski (2012-11-29 de mdy). «Speeding up PHP-based development with HHVM». Facebook. Consultado el 2014-08-02 de mdy.
- ↑ «Announcement on GitHub removing HPHPc support». github.com. Facebook. 2013-02-19 de mdy. Consultado el 2013-05-24 de mdy.
- ↑ «HipHop Bytecode v1 revision 18». github.com. Facebook. 2014-07-31 de mdy. Consultado el 2013-05-24 de mdy.
- ↑ «facebook/hhvm: About upgrade to PHP 5.4 engine». github.com. May 2013. Consultado el 2014-08-02 de mdy.
- ↑ «facebook/hhvm: Home». github.com. Facebook. 2014-05-08 de mdy. Consultado el 2014-08-02 de mdy.
- ↑ Julien Verlaguet (April 2014). «Hack: a new programming language for HHVM». code.facebook.com. Facebook. Consultado el 2014-03-23 de mdy.
- ↑ Josh Lockhart (2014-04-03 de mdy). «Facebook's Hack, HHVM, and the future of PHP». O'Reilly Media. Consultado el 2014-08-02 de mdy.
- ↑ «Hack and HHVM: Type Annotations (Hack Manual)». docs.hhvm.com. Consultado el 2014-03-25 de mdy.
- ↑ «Hack and HHVM: Type Inference (Hack Manual)». docs.hhvm.com. Archivado desde el original el 26 de marzo de 2014. Consultado el 2014-03-25 de mdy.
- ↑ «Hack and HHVM: Unsupported PHP Features in Hack (Hack Manual)». docs.hhvm.com. Consultado el 2014-04-02 de mdy.
- ↑ Krill, Paul (20 de septiembre de 2017). «Forget PHP! Facebook's HHVM engine switches to Hack instead». InfoWorld (en inglés). Consultado el 6 de febrero de 2019.
- ↑ «We are the 98.5% (and the 16%)». hhvm.com. 2013-12-19 de mdy. Consultado el 2014-08-02 de mdy.
- ↑ a b Livneh, Ori (29 de diciembre de 2014). «How we made editing Wikipedia twice as fast». Diff (en inglés estadounidense). Consultado el 1 de diciembre de 2020.
- ↑ a b «Wikipedia on HHVM». HHVM. Consultado el 1 de diciembre de 2020.
- ↑ «HHVM - MediaWiki». www.mediawiki.org. Consultado el 1 de diciembre de 2020.
- ↑ «HHVM 4.0.0». HHVM. Consultado el 1 de diciembre de 2020.
- ↑ «⚓ T176370 Migrate to PHP 7 in WMF production». phabricator.wikimedia.org. Consultado el 1 de diciembre de 2020.