painel hhvm, zephir, phpng

17
Zephir Linguagem de Programação de alto nível para criar extensões para PHP @lgavinho

Upload: imasters

Post on 25-Jun-2015

226 views

Category:

Education


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

Page 1: Painel HHVM, Zephir, PHPNG

Zephir  

Linguagem  de  Programação  de  alto  nível  para  criar  extensões  para  PHP  

@lgavinho  

Page 2: Painel HHVM, Zephir, PHPNG

http://zephir-lang.com/ 0.4.2 alpha

Zend  Engine  /  PHP  /  Intermediate  

@lgavinho  

Page 3: Painel HHVM, Zephir, PHPNG

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  

Page 4: Painel HHVM, Zephir, PHPNG

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  

Page 5: Painel HHVM, Zephir, PHPNG

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  

Page 6: Painel HHVM, Zephir, PHPNG

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  

Page 7: Painel HHVM, Zephir, PHPNG

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  

Page 8: Painel HHVM, Zephir, PHPNG

<?php    if  (isset($myArray[$key]))  {          $value  =  $myArray[$key];          echo  $value;  }  

Operador  Fetch  

if  fetch  value,  myArray[key]  {          echo  value;  }  

zephir  

@lgavinho  

Page 9: Painel HHVM, Zephir, PHPNG

Atalhos  para  geYer/seYer  namespace  App;    class  MyClass  {          protected  myProperty  {                  set,  get,  toString          };            protected  someProperty  =  10  {                  set,  get          };    }  

@lgavinho  

Page 10: Painel HHVM, Zephir, PHPNG

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  

Page 11: Painel HHVM, Zephir, PHPNG

ZEPHIR  -­‐  3  X  MAIS  RÁPIDO  Algumas  comparações  com  PHP  

@lgavinho  

Page 12: Painel HHVM, Zephir, PHPNG

Geração  de  código  naEvo  

@lgavinho  

Page 13: Painel HHVM, Zephir, PHPNG

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  

Page 14: Painel HHVM, Zephir, PHPNG

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  

Page 15: Painel HHVM, Zephir, PHPNG

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  

Page 16: Painel HHVM, Zephir, PHPNG

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  

Page 17: Painel HHVM, Zephir, PHPNG

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