SlideShare uma empresa Scribd logo
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	
  AppExcepEon("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	
  

Mais conteúdo relacionado

PPTX
PHP Além da universidade
PDF
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
ODP
Oficina de Web Design Lecom - PHP e JavaScript
PDF
Como Construir um Compilador cap-1
PDF
Desenvolvimento Rápido de Programas Linha de Comando
PDF
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PPTX
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
PHP Além da universidade
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
Oficina de Web Design Lecom - PHP e JavaScript
Como Construir um Compilador cap-1
Desenvolvimento Rápido de Programas Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
Curso Desenvolvimento WEB com PHP - PHP (parte 1)

Mais procurados (20)

PDF
Doctrine2 Seminário PHP
PDF
PHP: Linguagem + Mysql + MVC + AJAX
PDF
Introdução a php
PDF
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PPTX
PDF
Php m18
PDF
PHP para aplicações Web de grande porte
PDF
Criando sua própria linguagem de programação
ODP
Curso Linguagem de Programação I - PHP Básico
PPS
CURSO DE PHP PARA INICIANTES - AULA 1
PDF
Zend Framework 2 - Desenvolvimento Ágil Competente
PDF
PHP Day - PHP para iniciantes
PDF
Como Construir um compilador-cap 2
ODP
Qualidade no desenvolvimento de software com PHPUnit
PDF
Aula 02 - Introdução ao PHP
PDF
PHP - Introdução
PDF
O que esperar do Zend Framework 2
PPTX
Comandos gerais do PHP
PPT
Shell Script
Doctrine2 Seminário PHP
PHP: Linguagem + Mysql + MVC + AJAX
Introdução a php
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
Php m18
PHP para aplicações Web de grande porte
Criando sua própria linguagem de programação
Curso Linguagem de Programação I - PHP Básico
CURSO DE PHP PARA INICIANTES - AULA 1
Zend Framework 2 - Desenvolvimento Ágil Competente
PHP Day - PHP para iniciantes
Como Construir um compilador-cap 2
Qualidade no desenvolvimento de software com PHPUnit
Aula 02 - Introdução ao PHP
PHP - Introdução
O que esperar do Zend Framework 2
Comandos gerais do PHP
Shell Script
Anúncio

Destaque (6)

PPTX
Midiacode
PPTX
Windows Store
PDF
TDC2013 SP - Criando Webservices ultra rápidos com PHP Phalcon e MongoDB
PPTX
Phonegap, muito além dos nativos!
PDF
10 Things We Know About Video Games for Learning
PDF
Study: The Future of VR, AR and Self-Driving Cars
Midiacode
Windows Store
TDC2013 SP - Criando Webservices ultra rápidos com PHP Phalcon e MongoDB
Phonegap, muito além dos nativos!
10 Things We Know About Video Games for Learning
Study: The Future of VR, AR and Self-Driving Cars
Anúncio

Semelhante a Zephir (20)

PDF
Painel HHVM, Zephir, PHPNG
PDF
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PDF
Slide Aula - Curso CakePHP
PDF
PHP like a super hero
PDF
PHP - Programação para seres humanos
PPTX
Phalcon FrameWork - Considerações Iniciais
PPT
PHP GERAL
PPSX
Cakephp 2.0 - O que mudou
PDF
Seu framework é melhor pra quê?
PDF
Introdução ao Zend Framework 2
PDF
Introdução a Frameworks
PPSX
5 Maneiras de melhorar seu código PHP
PDF
Serversidephp pptx2-120418140114-phpapp01
PDF
Composer dependency manager - TDC - POA 2017
PDF
AMD, BDD, e o Javali
PDF
O futuro do elephante: as promessas do php para 2019
PDF
Frameworks PHP
PDF
Php5 e a orientação a objetos
PDF
Livro angular2
PDF
PHP, Mercado e Certificações
Painel HHVM, Zephir, PHPNG
PHP Experience 2016 - [Palestra] Keynote: PHP-7
Slide Aula - Curso CakePHP
PHP like a super hero
PHP - Programação para seres humanos
Phalcon FrameWork - Considerações Iniciais
PHP GERAL
Cakephp 2.0 - O que mudou
Seu framework é melhor pra quê?
Introdução ao Zend Framework 2
Introdução a Frameworks
5 Maneiras de melhorar seu código PHP
Serversidephp pptx2-120418140114-phpapp01
Composer dependency manager - TDC - POA 2017
AMD, BDD, e o Javali
O futuro do elephante: as promessas do php para 2019
Frameworks PHP
Php5 e a orientação a objetos
Livro angular2
PHP, Mercado e Certificações

Zephir

  • 1. Zephir   Linguagem  de  Programação  de  alto   nível  para  criar  extensões  para  PHP   @lgavinho  
  • 2. http://zephir-lang.com/ 0.4.2 alpha Zend  Engine  /  PHP  /  Intermediate   @lgavinho  
  • 3. 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  
  • 4. 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  
  • 5. 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  
  • 6. 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  
  • 7. 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  
  • 8. <?php     if  (isset($myArray[$key]))  {          $value  =  $myArray[$key];          echo  $value;   }   Operador  Fetch   if  fetch  value,  myArray[key]  {          echo  value;   }   zephir   @lgavinho  
  • 9. Atalhos  para  geYer/seYer   namespace  App;     class  MyClass   {          protected  myProperty  {                  set,  get,  toString          };            protected  someProperty  =  10  {                  set,  get          };     }   @lgavinho  
  • 10. 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  
  • 11. ZEPHIR  -­‐  3  X  MAIS  RÁPIDO   Algumas  comparações  com  PHP   @lgavinho  
  • 12. Geração  de  código  naEvo   @lgavinho  
  • 13. Branch  predicEon  hints   let  allPaths  =  [];   for  path  in  this-­‐>_paths  {          if  unlikely  path-­‐>isAllowed()  ==  false  {                  throw  new  AppExcepEon("error!!");          }  else  {                  let  allPaths[]  =  path;          }   }   PermiEr  oEmizar  o  processamento  informando   que  uma  condição  raramente  irá  acontecer.   @lgavinho  
  • 14. 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  
  • 15. 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  
  • 16. 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  
  • 17. 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