painel hhvm, zephir, phpng
DESCRIPTION
Painel: HHVM x Zephir x PHPNG - com Anderson Casimiro, Levi Ferreira e Luiz Gustavo Gavinho no InterCon PHP 2014. Confira outras apresentações em: http://interconphp.imasters.com.br/ O InterCon PHP aconteceu no dia 19 de Julho de 2014 no Hotel Intercontinental São PauloTRANSCRIPT
Zephir
Linguagem de Programação de alto nível para criar extensões para PHP
@lgavinho
http://zephir-lang.com/ 0.4.2 alpha
Zend Engine / PHP / Intermediate
@lgavinho
Zephir = Phalcon 2 • Reduzir o tempo de desenvolvimento • Fazer código menos propenso a erros de codificação • PermiEr que mais membros da comunidade possam se envolver • PermiEr que mais usuários do Phalcon possam ler e entender como
uma funcionalidade é implementada • PermiEr aos desenvolvedores Erar mais proveito da estrutura e
uma total compreensão de como ele funciona • Apresentar potencial de refatoração e oEmizações sem afetar a
estabilidade • Adaptar facilmente o código para novas versões do PHP • PermiEr contribuidores para implementar componentes adicionais
@lgavinho
Começando...
Instalar dependências
Instalar Json-‐C (compilar)
Instalar Zephir
(compilar)
$ sudo apt-‐get update $ sudo apt-‐get install git gcc make re2c php5 php5-‐json php5-‐dev libpcre3-‐dev
$ git clone hYps://github.com/json-‐c/json-‐c.git $ cd json-‐c $ sh autogen.sh $ ./configure $ make && sudo make install
$ git clone hYps://github.com/phalcon/zephir $ cd zephir $ ./install -‐c
hYp://blog.zephir-‐lang.com/post/73772370742/installing-‐tesEng-‐zephir-‐on-‐vagrant @lgavinho
Zephir namespace Test; /** * MyTest (test/mytest.zep) */ class MyTest { public funcEon someMethod() { /* Variables must be declared */ var myArray; int i = 0, length; /* Create an array */ let myArray = ["hello", 0, 100.25, false, null]; /* Count the array into a 'int' variable */ let length = count(myArray); /* Print value types */ while i < length { echo typeof myArray[i], "\n"; let i++; } return myArray; } }
• Proteção de código-‐fonte
• Compilação possibilita idenEficar erros mais cedo
• Baixa curva de aprendizado. Muito parecida com PHP.
Exemplo de código em Zephir @lgavinho
Algumas caracterísEcas com foco no Programador
• Orientada a objetos • Tipos estáEcos e dinâmicos • Análise estáEca de código • Organização em namespace • Parametros Read-‐Only (const) • Type hints • Operador Fetch • Atalhos para geYer/seYer • Return Type hints
@lgavinho
Type hints
// Tell the compiler that "o" // is an instance of class MyClass let o = <MyClass> this-‐>_myObject; o-‐>myMethod();
Type hint informa ao compilador qual classe está relacionado a uma variável dinâmica permiEndo que o compilador possarealizar mais verificações de compilação.
@lgavinho
<?php if (isset($myArray[$key])) { $value = $myArray[$key]; echo $value; }
Operador Fetch
if fetch value, myArray[key] { echo value; }
zephir
@lgavinho
Atalhos para geYer/seYer namespace App; class MyClass { protected myProperty { set, get, toString }; protected someProperty = 10 { set, get }; }
@lgavinho
Return type hints
namespace App; class MyClass { public funcEon getSomeData(a) -‐> string|bool { if a == false { return false; } return "error"; } }
Definir Epos dos retornos dos métodos. Tipos escalares, classes e void (sem retorno).
@lgavinho
ZEPHIR -‐ 3 X MAIS RÁPIDO Algumas comparações com PHP
@lgavinho
Geração de código naEvo
@lgavinho
Branch predicEon hints
let allPaths = []; for path in this-‐>_paths { if unlikely path-‐>isAllowed() == false { throw new App\ExcepEon("error!!"); } else { let allPaths[] = path; } }
PermiEr oEmizar o processamento informando que uma condição raramente irá acontecer.
@lgavinho
Outras caracterísEcas
• Wrapper para funções customizadas oEmizadas em C
• Arquivo de configuração: – 6 parametros de oEmizações – saída no phpinfo()
@lgavinho
Zephir não vai ser
• Próxima linguagem de programação revolucionária. • SubsEtuição de PHP ou C (ou qualquer outra linguagem)
• Ser a linguagem mais elegante e coerente disponível • Cobrir todos os recursos possíveis (atual ou futura) fornecido pelo PHP ou C
• Implementar todos os recursos exatamente como no PHP ou C
• Apoiar cada possível paradigma de programação • Fazer todos felizes
@lgavinho
Pontos fracos
• Tempo de compilação pode baixar produEvidade de desenvolvimento – Solução Zephir RunEme
• Debug • Menos agilidade na atualização em produção (live). Requer restart do webserver.
• Muito novo.
@lgavinho
Então…
• É muito rápido. É simples. • OEmizar algoritmos de alta demanda na aplicação.
• Ganhar dinheiro desenvolvendo extensões permiEndo proteger seu código-‐fonte.
• Usar componentes em C facilmente no PHP. • E é muito rápido.
@lgavinho