SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
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

Mais procurados

PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...iMasters
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porteFelipe Ribeiro
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoronaldoferraz
 
Curso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoCurso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoNorton Guimarães
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1Norivan Oliveira
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesAlmir Mendes
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Maellson Marques
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2Flávio Lisboa
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 

Mais procurados (20)

Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
Php m18
Php m18Php m18
Php m18
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
Curso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoCurso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP Básico
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantes
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Shell Script
Shell ScriptShell Script
Shell Script
 

Destaque

TDC2013 SP - Criando Webservices ultra rápidos com PHP Phalcon e MongoDB
TDC2013 SP - Criando Webservices ultra rápidos com PHP Phalcon e MongoDBTDC2013 SP - Criando Webservices ultra rápidos com PHP Phalcon e MongoDB
TDC2013 SP - Criando Webservices ultra rápidos com PHP Phalcon e MongoDBLuiz Gavinho
 
Phonegap, muito além dos nativos!
Phonegap, muito além dos nativos!Phonegap, muito além dos nativos!
Phonegap, muito além dos nativos!Luiz Gavinho
 
10 Things We Know About Video Games for Learning
10 Things We Know About Video Games for Learning10 Things We Know About Video Games for Learning
10 Things We Know About Video Games for LearningKarl Kapp
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

Destaque (6)

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

Semelhante a Zephir

Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGiMasters
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01joaocarlobarros
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVMWilliam Gouvea
 

Semelhante a Zephir (20)

Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNG
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Python 08
Python 08Python 08
Python 08
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Palestra
PalestraPalestra
Palestra
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
PHP 5.3 - Introdução
PHP 5.3 - IntroduçãoPHP 5.3 - Introdução
PHP 5.3 - Introdução
 
PHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHPPHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHP
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
PHP(I-Bim).ppt
PHP(I-Bim).pptPHP(I-Bim).ppt
PHP(I-Bim).ppt
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Módulo de php
Módulo de phpMódulo de php
Módulo de php
 

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