PHP. ¿Qué es JIT?
"¡JIT llega a PHP!" Esta es la buena noticia de hoy para muchos desarrolladores, pero en principio es una realidad solamente para PHP 8. La nueva característica de la próxima gran versión de PHP ayudará aún más en la lucha contra uno de los problemas clásicos de PHP: el rendimiento.
Antes de seguir, creo que es importante leer los artículos anteriores sobre PHP, y repasar algunos conceptos…
¿Qué es JIT?
JIT, o la compilación JIT (just-in-time) es una forma de ejecutar el código informático que implica la compilación durante la ejecución de un programa, en tiempo de ejecución, y no antes de la ejecución. Normalmente se trata de traducir el código fuente, o bytecode, a lenguaje de máquina. ¿Será una respuesta de PHP a WebAssembly?
PHP y Zend VM
Como bien sabes, PHP implementa una máquina virtual - Zend VM - para ejecutar las instrucciones de tu código en el “tiempo de ejecución”. En el “tiempo de complicación”, PHP compila tu script en instrucciones que la máquina virtual entiende.
Es por ello que PHP es un lenguaje interpretado, y no compilado como C, o Java, en que la máquina virtual actúa como tu ordenador ejecutando el código.
OPCache y PHP
Este proceso de traducción en código de máquina lleva años funcionando correctamente, y ahora gracias a herramientas como OPCache es posible guardar en caché las instrucciones de tu código para que el “tiempo de complicación” sólo ocurra cuando sea necesario.
Sin embargo, JIT va un poco más allá.
¿Qué hace JIT?
JIT es una estrategia compleja - pero no “horrible” - de complicación que toma una representación intermedia de código y la convierte en código de máquina dependiente de la arquitectura, en tiempo de ejecución.
Lo que hace JIT en PHP es hacer que Zend VM ya no sea el anfitrión de tu código, si no la CPU directamente - ¿qué te parece?
El compilador JIT compila opcode en código de máquina y lo ejecuta, envés de decirle a Zend VM que lo ejecute. - ¿Es el adios al interprete?
¿Es realmente útil JIT?
Desde PHP 7 que la comunidad PHP está centrada en el rendimiento - Sergio nos comentaba hace pocos meses sobre cómo mejorar el rendimiento con PHP 7.4-, sobretodo después del nacimiento del proyecto HHVM de Facebook. HHVM utiliza JIT y los resultados son los que todos conocemos.
No obstante, vale la pena referir que JIT puede no hacer de tu sitio web un site más rápido. ¿Por qué pasaria eso? Sencillo: Las aplicaciones desarrolladas en PHP hacen un uso intensivo de entrada/salida (p.e. lectura/escritura en base de datos), mientras que JIT depende del procesador.
Dificultades
En una aplicación web no hay tanto “código caliente” - partes del código que se re-executa frecuentemente. Por tanto no hay compilación en código de máquina optimizado que es utilizado envés del código real.
Además, actualmente el hecho de generar código de máquina añade complejidad para el mantenimiento. ¿Te imaginas buscar errores de PHP en el código de máquina de JIT?
¿Qué ventajas y oportunidades puede aportar JIT?
JIT abre las puertas de PHP para que se pueda utilizar como un lenguaje de alto rendimiento - te imaginas usar JIT con Swoole ? - fuera de la web, abriendo así la puerta a ciencias de la moda como:
- el Machine Learning
- el renderizado 2D/3D
- el análisis de datos
Conclusión
Para concluir, no sabemos cuando saldrá PHP 8.0, posiblemente en 2021, pero ya puedes compilarlo desde el código fuente y jugar con JIT en tu Mac o Windows. Es cierto que de momento JIT ofrece pocos beneficios para tus aplicaciones web, pero creo que será una oportunidad más para PHP, y una prueba más de que tiene futuro como lenguaje de programación no solo para la web, pero sobretodo fuera de la web.
Te dejo un pequeño video donde puedes ver la generación de un fractal en tiempo real comparando PHP 7.0 y la prueba de concepto del compilador JIT. ¿Cómo lo ves?
¿Crees que vale la pena invertir en PHP en esta nueva década?
Foto: @giallo_photoshop from pexels.com
Fuentes: