Na escala do Facebook, os limites do PHP pesavam muito: milhares de engenheiros publicavam código novo duas vezes por dia, mas chamar um método em um objeto nulo ou adivinhar o nome do método de uma API complexa só produzia erros em tempo de execução, e a linguagem dava pouca estrutura às ferramentas para introspecção. A linguagem dinâmica mantinha o ciclo de editar e atualizar rápido, mas não oferecia rede de segurança antecipada, enquanto uma linguagem convencional com tipagem estática traria verificações ao custo da velocidade de iteração — e uma reescrita jogaria fora o investimento do Facebook em PHP e em suas bibliotecas.
O Hack, anunciado em 20 de março de 2014 como parte do runtime HHVM, resolveu esse impasse ao continuar sendo um superconjunto do PHP. A maioria dos arquivos PHP já é Hack válido, então um engenheiro podia adicionar anotações de tipo a uma função e deixar a seguinte dinâmica, com código tipado estaticamente e dinamicamente interoperando perfeitamente até dentro de um único arquivo. O Hack adicionou generics, tipos anuláveis, aliases de tipo, coleções e expressões lambda, e o HHVM aplicava em tempo de execução os tipos anotados de retorno e de parâmetros, o que também permitia ao seu JIT confiar com segurança nas anotações para otimização.
Para manter intacto o fluxo rápido do PHP, a equipe arquitetou o verificador de tipos como um servidor local que observa o sistema de arquivos e mantém todo o grafo de código na memória; as verificações típicas rodavam em menos de 200 milissegundos e raramente passavam de um segundo. Como a conversão era granular e opcional, os engenheiros converteram voluntariamente a maior parte do próprio código, ferramentas internas de modificação de código automatizaram o restante e, ao longo do ano anterior, quase toda a base de código PHP do Facebook havia migrado para o Hack.
O mesmo anúncio abriu o código do Hack e das ferramentas de conversão sob o guarda-chuva do HHVM, que continuaria executando PHP sem modificações ao lado do Hack, e convidou desenvolvedores para um Hack Developer Day no campus de Menlo Park no mês seguinte. O lançamento atraiu 576 pontos e 415 comentários no Hacker News no dia em que apareceu.
Acoplar tipagem estática gradual ao próprio PHP para que a segurança se espalhe função a função, nunca de uma vez só
A compatibilidade de superconjunto significou nenhuma reescrita e nenhuma migração big-bang: os arquivos PHP existentes continuaram rodando, o HHVM permaneceu um runtime PHP e as bibliotecas PHP de terceiros continuaram utilizáveis o tempo todo.
A granularidade por função permitiu que a segurança se espalhasse no ritmo de cada equipe, porque o código sem anotações permanecia dinâmico em vez de impedir a conversão de um arquivo ou módulo inteiro.
Um servidor verificador que observa o sistema de arquivos manteve o feedback abaixo de 200 milissegundos, então a tipagem estática não onerou o ciclo de editar e atualizar que tornava a iteração em PHP rápida.
Os engenheiros escolheram anotar o próprio código e codemods cuidaram do restante repetitivo, então uma base de código de milhões de linhas foi convertida em um ano em vez de esperar por uma equipe de migração dedicada.
Não reescreva para ganhar segurança: faça a linguagem aceitar código antigo, deixe a nova disciplina se espalhar uma função por vez e mantenha a verificação rápida o bastante para nunca interromper o fluxo de trabalho.
O Hack e suas ferramentas de modificação de código foram abertos em hacklang.org como parte do HHVM, e o Facebook disse que o HHVM continuaria sendo um runtime PHP trabalhando para paridade com o PHP 5, para que código PHP de terceiros continuasse rodando ao lado do Hack. O anúncio atraiu 576 pontos e 415 comentários no Hacker News em 20 de março de 2014, e o Facebook planejou um Hack Developer Day em seu campus de Menlo Park para o mês seguinte. Dentro do Facebook a migração já estava efetivamente concluída: quase toda a base de código PHP rodava Hack após cerca de um ano de adoção orgânica mais ferramentas automatizadas de refatoração.
CONFIRA AS EVIDÊNCIAS
As fontes
- 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 ·