Hack Language
Rafael Anastácio
Davi Catunda
Diego
Bretas
Sumário
● Motivação
● PHP
● HHVM
● The Hack Language
● Tutorial prático
Motivação
Motivação
Motivação
● Erros que podem ser percebidos
somente em termo de execução
● API complexasErros detectados somente em tempo de execuçãoAPI complexa
Motivação
● Linguagem nova -> Desenvolvedores mais
produtivoso Iteração rápida
o Preservar PHP
o Detecção de erro
Motivação
● Linguagem dinâmicamente tipadaso Rápido desenvolvimento
Sacrifício na habilidade de detectar erros rapidamente
Sacrifício na habilidade de uma introspeccção rápida no código
Motivação
Motivação
● Linguagem de programação para HHVM
● Interopera perfeitamente com PHP
● Conciliao o rápido desenvolvimento do PHP
o disciplina provida pela tipagem estática
o Adiciona ferramentas encontradas em outras linguagens modernas
Checagem de tipo instantânea
Problemao 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...
Checagem de tipo instantânea
Problemao 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.
Checagem de tipo instantânea
Soluçãoo 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.
Checagem de tipo instantânea
Resultadoo 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.
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
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.
HHVM
Fonte: http://hhvm.com/frameworks/
HHVM
O que é HHVMo 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.
HHVM
O Compilador JITo 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).
HHVM
O Compilador JITo 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.
Migração de códigoo 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.
Migração de códigoo 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.
Migração de código
Automatizaçãoo 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.
Web Development
Que linguagem/framework utilizaro 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
The Hack Language
Suporteo 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
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.
The Hack Language
Anotações de tipoo Permite explicitar no código em PHP tipos nos
parametros, variáveis de membros de classes e valores de retorno.
The Hack Language
Genericso Permite parametrizar métodos e classes(i.e um
tipo associado quando uma classe ou metodo é instanciado)
The Hack Language
Tipos Anuláveiso 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.
The Hack Language
Coleçõeso 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).
The Hack Language
Lambdaso Oferecem funcionalidade similar as funções
anonimas do PHP, mas eles capturam implicitamente variaveis do corpo destas funções e sao menos verbosas