- O documento discute a motivação e características da linguagem de programação Hack, desenvolvida pelo Facebook como uma extensão estática e tipada de PHP. Hack oferece checagem de tipos instantânea, interoperabilidade com PHP, e novas funcionalidades como generics, coleções e lambdas.
5. Motivação
● Erros que podem ser percebidos
somente em termo de execução
● API complexas
Erros detectados somente em tempo de
execução
API complexa
6. Motivação
● Linguagem nova -> Desenvolvedores mais
produtivos
o Iteração rápida
o Preservar PHP
o Detecção de erro
7. Motivação
● Linguagem dinâmicamente tipadas
o Rápido desenvolvimento
Sacrifício na habilidade de detectar erros
rapidamente
Sacrifício na habilidade de uma
introspeccção rápida no código
9. Motivação
● Linguagem de programação para HHVM
● Interopera perfeitamente com PHP
● Concilia
o o rápido desenvolvimento do PHP
o disciplina provida pela tipagem estática
o Adiciona ferramentas encontradas em outras
linguagens modernas
10. Checagem de tipo
instantânea
Problema
o Durante o desenvolvimento, um programador PHP
pode facilmente alternar entre o código fonte e
seu resultado no navegador.
o Pode-se "iterar" nesse processo quantas vezes
eles quiserem até atingirem o grau de perfeição
almejado do código...
11. Checagem de tipo
instantânea
Problema
o Uma checagem de tipos tradicional
normalmente rompe com a rotina de feedback
devido ao fato de a análise de código ser
demorada.
o Para não atrasar o fluxo de trabalho do PHP, o
Facebook projetou uma abordagem nova que
reconcilia feedback instantâneo com segurança
quanto a tipagem.
12. Checagem de tipo
instantânea
Solução
o A solução arquitetural do Facebook foi projetar um
type checker num servidor local que observa o
sistema de arquivos onde o código a ser
analisado se encontra.
o O servidor mantém toda informação sobre o
código em memória e automaticamente atualiza
suas informações quando ocorrem mudanças.
13. Checagem de tipo
instantânea
Resultado
o O type checker roda em menos que 200
millisegundos e raramente mais que 1 segundo.
o Conseguentemente tornou-se possível a rotina de
checagem sem atraso perceptível.
14. HHVM
O que é HHVM?
o Uma máquina virtual projetada para executar
programas escritos em Hack e PHP.
o Usa a abordagem de compilação just-in-time (JIT)
para obter uma performance maior e, ao mesmo
tempo, prover a flexibilidade oriunda do PHP
15. HHVM
O que é HHVM?
o HHVM roda muito dos código PHPs utilizados no
mundo. Desenvolvedores e hosts estão
adotando o HHVM.
o Ainda existem pequenas incompatibilidades,
porém a solução proposta pelo Facebook roda
bem os top 20 frameworks do Github.
17. HHVM
O que é HHVM
o O time do HHVM, juntamente com a cooperação
de membros da comunidade, tornou um objetivo
claro e de alta prioridade rodar todos os códigos
PHP existentes na comunidade.
18. HHVM
O Compilador JIT
o O HHVM não interpreta diretamente ou compila
código PHP em C++. Hack e PHP são compilados
para um código portável (bytecode)
intermediário.
o Tal código é traduzido para código de máquina
de 64 bits dinamicamente em tempo de
execução por um compilador just-in-time (JIT).
19. HHVM
O Compilador JIT
o Tal abordagem permite inúmeras otimizações
que não seria possível para código binário gerado
estaticamente.
o Consequentemente torna possível maior
performance dos programas Hack e PHP.
20. Migração de código
o Alguns benefícios advindos de segurança de
tipagem e de refatoração do Hack são mais
perceptíveis quando todo o código está na
linguagem Hack (e menos código em PHP).
o Como a transição para uma nova linguagem
requer tempo, a linguagem Hack pode interoperar
diretamente com arquivos PHP de uma aplicação
enquanto os novos arquivos são introduzidos aos
poucos.
21. Migração de código
o O transições que envolvem adição de anotações
de tipos e uso de novos recursos de linguagens
podem ser feito conforme necessidade para um
arquivo de código.
o No mesmo arquivo de código podem existir:
Funções com assinaturas contendo tipos
Funções com assinaturas sem tipos.
o Se a função não possui tipos em sua assinatura, a
tipagem é conferida dinamicamente.
22. Migração de código
Automatização
o Historicamente, a aceitação do Hack foi grande o
suficiente para muitos migrarem seus códigos
voluntariamente.
o Criaram assim, uma ferramenta de automatização
para migração de código para auxiliar no
processo.
Liberado como parte do Hack.
23. Web Development
Que linguagem/framework utilizar
o C/C++
performance
o Java
write once, run everywhere
o Ruby On Rails
Simple and easy to write
o Python Django
More with less
o PHP(Yii, Zend, CodeIgnator) ou Hack
24. The Hack Language
Suporte
o Tem suas raízes no PHP, mas alguns funções
obsoletas ou incompatíveis com tipagem estática
foram removidas, (e.g “variáveis variáveis”) e
outras adicionadas
25. The Hack Language
Tipagem estática (principal)
o Foi adicionado informação de tipo a assinatura de funções e
membros de classe, já o algoritmo de checagem (o “type
checker”) infere o resto.
o A checagem de tipo é incremental, de tal forma que um
arquivo pode ser convertido para Hack e o resto pode
continuar sendo dinamicamente tipado.
o Tecnicamente Hack é uma linguagem dinamicamente tipada
que funciona com tipagem estática.
26. The Hack Language
Anotações de tipo
o Permite explicitar no código em PHP tipos nos
parametros, variáveis de membros de classes e
valores de retorno.
27. The Hack Language
Generics
o Permite parametrizar métodos e classes(i.e um
tipo associado quando uma classe ou metodo é
instanciado)
28. The Hack Language
Tipos Anuláveis
o Podemos usar o operador ? para introduzir um
modo mais seguro de lidar com nulos sendo muito
util para tipos primitivos (bool, int .. etc) bastando
fazer ?bool e ?int. O operador pode ser usado em
qualquer tipo ou classe.
29. The Hack Language
Coleções
o Melhora a experiência de trabalhar com arrays em
PHP, provendo classes, já parametrizadas
Vector (lista com ordenação e indexada)
Map (um dicionário ordenado)
Set (uma lista de valores unicos)
Pair (uma coleção indexada composta de exatamente 2
elementos)
Collections enhance the experience of working with PHP arrays, by providing first class, built-in parameterized types such as
Vector (an ordered, index-based list), Map (an ordered dictionary), Set (a list of unique values), and Pair (an index-based
collection of exactly two elements).
30. The Hack Language
Lambdas
o Oferecem funcionalidade similar as funções
anonimas do PHP, mas eles capturam
implicitamente variaveis do corpo destas funções
e sao menos verbosas
Notas do Editor
Contexto do Facebook -> Milhares de engenheiros programando ao mesmo tempo -> qualquer contratempo pode ser problemático
Desenvolvedor entende a semântica, mas gasta bastante tempo com nomes de métodos na documentação
Desenvolvedor entende a semântica, mas gasta bastante tempo com nomes de métodos na documentação
Desenvolvedor entende a semântica, mas gasta bastante tempo com nomes de métodos na documentação
Desenvolvedor entende a semântica, mas gasta bastante tempo com nomes de métodos na documentação