tag name php hhvm hacklang

name - ¿El código escrito en Hack es más rápido que el código escrito en PHP en HHVM?



get tag name wordpress (1)

Respondí esto en Reddit hace unos meses . He copiado mi respuesta a continuación, ya que el estado del mundo no ha cambiado mucho desde entonces. Pero tenga en cuenta que la HHVM todavía está evolucionando, bastante rápido en realidad, por lo que esto podría quedar obsoleto en un mes o dos más.

Trabajo en el equipo Hack en Facebook. La respuesta a esta pregunta es algo sutil.

Mover su código PHP de PHP5 a HHVM es probable que resulte en una aceleración significativa, como han dicho otros. Qué tan significativo depende de una tonelada de factores. Si ya estás vinculado a IO, es posible que no veas mucho; Si está más cerca del límite de la CPU, se han informado aceleraciones de hasta 5 veces, aunque es probable que obtenga algo en algún lugar intermedio. Debería probarlo en su propio código, con una carga de trabajo real: HHVM tiene muchos factores, especialmente un tiempo de inicio mayor, que hacen que no funcione tan bien en microbenchmarks, pero en cargas de trabajo reales debería superar a PHP5. Para obtener el máximo beneficio, refactorizar su código para que las cosas salgan del nivel superior y entre en funciones / clases ayudará a una tonelada (no podemos JIT código a nivel superior), al igual que la configuración del modo autoritativo de repo .

Pero eso es simplemente PHP en HHVM, no Hack en HHVM. ¿Qué aceleración obtienes luego de convertir tu código a Hack? Depende de cómo realice la conversión, pero la respuesta es, al menos en este momento, "no mucho". Si solo se pega <?hh en la parte superior de cada archivo, en lugar de <?php , y corrige las incompatibilidades que surgen cuando ejecuta el buscador de tipos , es muy probable que su código tenga el mismo rendimiento que antes. Hack y el código PHP tienen la misma representación en tiempo de ejecución, por lo que realmente no ha cambiado mucho.

Sin embargo, si haces eso, ¡entonces no estás aprovechando al máximo Hack! Si ingresa y comienza a agregar anotaciones de tipo, puede generar más y más información para que HHVM la use en tiempo de ejecución. Este proceso es lo que puede acelerar su código: HHVM puede generar código especializado en el tipo (es decir, más rápido) en muchas circunstancias donde antes podría no haber podido inferir el tipo. Tampoco esperes una gran aceleración aquí, esto es en gran medida teórico en este momento, y hay muchos lugares donde podemos aprovechar mejor la información de tipo para generar código más rápido. (No hacemos mucho con los tipos de devolución en el tiempo de ejecución en este momento, por ejemplo). Pero esta es la parte que podría ayudar, y podría ayudar más a medida que HHVM se vuelve más inteligente.

Pero, por supuesto, tenga en cuenta que la velocidad de ejecución no era el objetivo de Hack, sino la eficiencia del desarrollador. Cualquier ganancia de rendimiento probablemente no valdrá la pena, ya que el esfuerzo va de PHP en HHVM a Hack en HHVM. La ganancia en la productividad del desarrollador, sin embargo, probablemente sea.

¿Así que pasar de PHP5 a HHVM acelera tu código? Muy probable. ¿Hacer una conversión rápida a Hack lo acelera? No. ¿Agregar más anotaciones de tipo lo acelera? Tal vez un poco, quizás más en el futuro, pero ese no es realmente el punto.

¿Podemos esperar una ganancia de velocidad al pasar de PHP a Hack en HHVM?

Pienso que los parámetros / tipos de retorno fuertemente tipados, en particular los escalares, permiten que HHVM haga un mejor trabajo en la compilación del código en código nativo, o la ganancia de velocidad es insignificante en comparación con el uso de PHP clásico y sus tipos mixtos ?