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 complexas
Erros detectados somente em tempo de
execução
API complexa
Motivação
● Linguagem nova -> Desenvolvedores mais
produtivos
o Iteração rápida
o Preservar PHP
o Detecção de erro
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
Motivação
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
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...
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.
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.
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.
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 é 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.
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).
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.
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.
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.
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.
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
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
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 tipo
o Permite explicitar no código em PHP tipos nos
parametros, variáveis de membros de classes e
valores de retorno.
The Hack Language
Generics
o Permite parametrizar métodos e classes(i.e um
tipo associado quando uma classe ou metodo é
instanciado)
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.
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).
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

Facebook's Hack programming language / Linguagem de programação Hack do Facebook

  • 1.
  • 2.
    Sumário ● Motivação ● PHP ●HHVM ● The Hack Language ● Tutorial prático
  • 3.
  • 4.
  • 5.
    Motivação ● Erros quepodem 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âmicamentetipadas 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
  • 8.
  • 9.
    Motivação ● Linguagem deprogramaçã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 oDurante 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 oUma 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 oA 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 oO 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.
  • 16.
  • 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 oO 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 oTal 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 oAlguns 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 oO 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 oHistoricamente, 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/frameworkutilizar 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 oTem 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 Tipagemestá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çõesde 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 oPermite parametrizar métodos e classes(i.e um tipo associado quando uma classe ou metodo é instanciado)
  • 28.
    The Hack Language TiposAnulá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 oMelhora 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 oOferecem 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

  • #4 Contexto do Facebook -> Milhares de engenheiros programando ao mesmo tempo -> qualquer contratempo pode ser problemático
  • #7 Desenvolvedor entende a semântica, mas gasta bastante tempo com nomes de métodos na documentação
  • #8 Desenvolvedor entende a semântica, mas gasta bastante tempo com nomes de métodos na documentação
  • #9 Desenvolvedor entende a semântica, mas gasta bastante tempo com nomes de métodos na documentação
  • #10 Desenvolvedor entende a semântica, mas gasta bastante tempo com nomes de métodos na documentação