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 
$ 
sudo 
apt-­‐get 
update 
$ 
sudo 
apt-­‐get 
install 
git 
gcc 
make 
re2c 
php5 
php5-­‐json 
php5-­‐ 
dev 
libpcre3-­‐dev 
Instalar 
Json-­‐ 
C 
(compilar) 
$ 
git 
clone 
hYps://github.com/json-­‐c/json-­‐c.git 
$ 
cd 
json-­‐c 
$ 
sh 
autogen.sh 
$ 
./configure 
$ 
make 
&& 
sudo 
make 
install 
Instalar 
Zephir 
(compilar) 
$ 
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. 
@lgavinho 
Exemplo 
de 
código 
em 
Zephir
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 
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. 
// 
Tell 
the 
compiler 
that 
"o" 
// 
is 
an 
instance 
of 
class 
MyClass 
let 
o 
= 
<MyClass> 
this-­‐>_myObject; 
o-­‐>myMethod(); 
@lgavinho
Operador 
Fetch 
<?php 
if 
(isset($myArray[$key])) 
{ 
$value 
= 
$myArray[$key]; 
echo 
$value; 
} 
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 
Definir 
Epos 
dos 
retornos 
dos 
métodos. 
Tipos 
escalares, 
classes 
e 
namespace 
App; 
class 
MyClass 
{ 
public 
funcEon 
getSomeData(a) 
-­‐> 
string|bool 
{ 
if 
a 
== 
false 
{ 
return 
false; 
} 
return 
"error"; 
} 
} 
void 
(sem 
retorno). 
@lgavinho
Algumas 
comparações 
com 
PHP 
ZEPHIR 
-­‐ 
3 
X 
MAIS 
RÁPIDO 
@lgavinho
Geração 
de 
código 
naEvo 
@lgavinho
Branch 
predicEon 
hints 
PermiEr 
oEmizar 
o 
processamento 
informando 
que 
uma 
condição 
raramente 
irá 
acontecer. 
let 
allPaths 
= 
[]; 
for 
path 
in 
this-­‐>_paths 
{ 
if 
unlikely 
path-­‐>isAllowed() 
== 
false 
{ 
throw 
new 
AppExcepEon("error!!"); 
} 
else 
{ 
let 
allPaths[] 
= 
path; 
} 
} 
@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

Painel HHVM, Zephir, PHPNG

  • 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 $ sudo apt-­‐get update $ sudo apt-­‐get install git gcc make re2c php5 php5-­‐json php5-­‐ dev libpcre3-­‐dev Instalar Json-­‐ C (compilar) $ git clone hYps://github.com/json-­‐c/json-­‐c.git $ cd json-­‐c $ sh autogen.sh $ ./configure $ make && sudo make install Instalar Zephir (compilar) $ 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. @lgavinho Exemplo de código em Zephir
  • 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 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. // Tell the compiler that "o" // is an instance of class MyClass let o = <MyClass> this-­‐>_myObject; o-­‐>myMethod(); @lgavinho
  • 8.
    Operador Fetch <?php if (isset($myArray[$key])) { $value = $myArray[$key]; echo $value; } 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 Definir Epos dos retornos dos métodos. Tipos escalares, classes e namespace App; class MyClass { public funcEon getSomeData(a) -­‐> string|bool { if a == false { return false; } return "error"; } } void (sem retorno). @lgavinho
  • 11.
    Algumas comparações com PHP ZEPHIR -­‐ 3 X MAIS RÁPIDO @lgavinho
  • 12.
    Geração de código naEvo @lgavinho
  • 13.
    Branch predicEon hints PermiEr oEmizar o processamento informando que uma condição raramente irá acontecer. let allPaths = []; for path in this-­‐>_paths { if unlikely path-­‐>isAllowed() == false { throw new AppExcepEon("error!!"); } else { let allPaths[] = path; } } @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