facebook's hack programming language

30
Hack Language Rafael Anastácio Davi Catunda Diego Bretas

Upload: rafael-alves

Post on 07-Dec-2014

218 views

Category:

Software


3 download

DESCRIPTION

Just an overview of the new Facebook's programming language. It's written in PT-BR.

TRANSCRIPT

Page 1: Facebook's hack programming language

Hack Language

Rafael Anastácio

Davi Catunda

Diego

Bretas

Page 2: Facebook's hack programming language

Sumário

● Motivação

● PHP

● HHVM

● The Hack Language

● Tutorial prático

Page 3: Facebook's hack programming language

Motivação

Page 4: Facebook's hack programming language

Motivação

Page 5: Facebook's hack programming language

Motivação

● Erros que podem ser percebidos

somente em termo de execução

● API complexasErros detectados somente em tempo de execuçãoAPI complexa

Page 6: Facebook's hack programming language

Motivação

● Linguagem nova -> Desenvolvedores mais

produtivoso Iteração rápida

o Preservar PHP

o Detecção de erro

Page 7: Facebook's hack programming language

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

Page 8: Facebook's hack programming language

Motivação

Page 9: Facebook's hack programming language

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

Page 10: Facebook's hack programming language

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...

Page 11: Facebook's hack programming language

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.

Page 12: Facebook's hack programming language

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.

Page 13: Facebook's hack programming language

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.

Page 14: Facebook's hack programming language

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

Page 15: Facebook's hack programming language

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.

Page 16: Facebook's hack programming language

HHVM

Fonte: http://hhvm.com/frameworks/

Page 17: Facebook's hack programming language

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.

Rafael Anastácio Alves
Tem termo melhor para a traducao de "run all existing PHP code existing out in the wild."? Coloquei rodar todos os códigos PHP existentes na comunidade.
Davi Mourão
tem sim, "O time do HHVM, juntamente com a cooperação de membros de sua comunidade, decidiram ter como uma de suas prioridades sua compatibilidade com PHP.
Page 18: Facebook's hack programming language

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).

Page 19: Facebook's hack programming language

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.

Page 20: Facebook's hack programming language

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.

Page 21: Facebook's hack programming language

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.

Page 22: Facebook's hack programming language

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.

Page 23: Facebook's hack programming language

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

Page 24: Facebook's hack programming language

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

Page 25: Facebook's hack programming language

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.

Page 26: Facebook's hack programming language

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.

Page 27: Facebook's hack programming language

The Hack Language

Genericso Permite parametrizar métodos e classes(i.e um

tipo associado quando uma classe ou metodo é instanciado)

Page 28: Facebook's hack programming language

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.

Page 29: Facebook's hack programming language

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).

Page 30: Facebook's hack programming language

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