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
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
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
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