A la escala de Facebook, los límites de PHP golpeaban con fuerza: miles de ingenieros publicaban código nuevo dos veces al día, pero llamar a un método sobre un objeto nulo o adivinar el nombre del método de una API compleja producía errores solo en tiempo de ejecución, y el lenguaje daba a las herramientas poca estructura para inspeccionar. El lenguaje dinámico mantenía rápido el ciclo de editar y refrescar, pero no ofrecía una red de seguridad temprana, mientras que un lenguaje con tipado estático convencional habría aportado comprobaciones a costa de la velocidad de iteración, y una reescritura habría desechado la inversión de Facebook en PHP y sus bibliotecas.
Hack, anunciado el 20 de marzo de 2014 como parte del entorno de ejecución HHVM, resolvió esa cuadratura manteniéndose como un superconjunto de PHP. La mayoría de los archivos PHP ya son Hack válido, así que un ingeniero podía añadir anotaciones de tipo a una función y dejar la siguiente dinámica, con código de tipado estático y dinámico interoperando sin problemas incluso dentro de un mismo archivo. Hack añadió genéricos, tipos anulables, alias de tipos, colecciones y expresiones lambda, y HHVM aplicaba en tiempo de ejecución los tipos anotados de retorno y de parámetros, lo que también permitía a su JIT confiar con seguridad en las anotaciones para optimizar.
Para mantener intacto el rápido flujo de trabajo de PHP, el equipo diseñó el comprobador de tipos como un servidor local que vigila el sistema de archivos y mantiene todo el grafo de código en memoria; las comprobaciones típicas tardaban menos de 200 milisegundos y rara vez superaban un segundo. Como la conversión era granular y opcional, los ingenieros convirtieron voluntariamente la mayor parte de su propio código, las herramientas internas de modificación de código automatizaron el resto y, a lo largo del año anterior, casi todo el código base de PHP de Facebook había migrado a Hack.
El mismo anuncio liberó como código abierto Hack y las herramientas de conversión bajo el paraguas de HHVM, que seguiría ejecutando PHP sin modificar junto a Hack, e invitó a los desarrolladores a un Hack Developer Day en el campus de Menlo Park el mes siguiente. El lanzamiento obtuvo 576 puntos y 415 comentarios en Hacker News el día en que apareció.
Incrustar el tipado estático gradual en el propio PHP para que la seguridad se propague función a función, nunca de golpe
La compatibilidad como superconjunto significó no reescribir y no hacer una migración de golpe: los archivos PHP existentes siguieron ejecutándose, HHVM siguió siendo un entorno de ejecución de PHP y las bibliotecas PHP de terceros siguieron siendo utilizables en todo momento.
La granularidad por función permitió que la seguridad se propagara al ritmo de cada equipo, porque el código sin anotaciones seguía siendo dinámico en lugar de bloquear la conversión de un archivo o módulo entero.
Un servidor comprobador que vigila el sistema de archivos mantuvo la retroalimentación por debajo de 200 milisegundos, de modo que el tipado estático no gravó el ciclo de editar y refrescar que hacía rápida la iteración en PHP.
Los ingenieros eligieron anotar su propio código y las herramientas de modificación automatizada se encargaron del resto repetitivo, así que un código base de varios millones de líneas se convirtió en un año en lugar de esperar a un equipo de migración dedicado.
No reescribas para ganar seguridad: haz que el lenguaje acepte el código antiguo, deja que la nueva disciplina se propague una función a la vez y mantén la comprobación lo bastante rápida como para que nunca interrumpa el flujo de trabajo.
Hack y sus herramientas de modificación de código se liberaron como código abierto en hacklang.org como parte de HHVM, y Facebook dijo que HHVM seguiría siendo un entorno de ejecución de PHP que avanzaría hacia la paridad con PHP 5 para que el código PHP de terceros siguiera ejecutándose junto a Hack. El anuncio obtuvo 576 puntos y 415 comentarios en Hacker News el 20 de marzo de 2014, y Facebook planeó un Hack Developer Day en su campus de Menlo Park para el mes siguiente. Dentro de Facebook la migración ya estaba efectivamente completa: casi todo el código base de PHP ejecutaba Hack tras aproximadamente un año de adopción orgánica más herramientas automatizadas de refactorización.
CONSULTA LAS PRUEBAS
Las fuentes
- Hack: a new programming language for HHVM Engineering at Meta · engineering.fb.com ·
- Hacker News discussion: Hack: a new programming language for HHVM Hacker News · news.ycombinator.com ·