Painel HHVM, Zephir, PHPNG

Post on 25-Jun-2015

227 views 0 download

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 Paulo

Transcript of Painel HHVM, Zephir, PHPNG

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