Fork me on GitHub

Grupo de desenvolvedores de PHP do estado de São Paulo
Próximos encontros e eventos? Visite a página do PHPSP no Meetup

HHVM e Hack Language: Compartilhando experiencias

Por em em Artigos,Encontros

TL;DR; No encontro mensal do Grupo PHPSP eu levantei a questão sobre usar ou não o “HHVM + Hack”, onde defendi a opinião que deveríamos “sim” usar novas tecnologias sem “medos”. No entanto, após 3 dias de trabalho com Hack, resolvi voltar para o bom e velho PHP e meu antigo companheiro Symfony. Os motivos dessa decisão explico abaixo com mais detalhes.

Contextualizando o problema

Abracei um projeto pessoal de desenvolver um Sistema Web de pequeno/médio “porte” para uma ONG, no qual tenho a liberdade de escolher a tecnologia que julgar mais adequada.

Dito isso, imaginei que seria uma ótima oportunidade para experimentar a nova “vedete” do mercado: HHVM e sua irmã Hack Language. E foi com esse pensamento que me pus a ler (quase na integra) a documentação oficial, bem como estudar e executar exemplos de código (do site oficial e de repositórios do GitHub).

Após 3 dias de programação intensa com essa nova tecnologia, compartilho com vocês os pontos “contra” e “a favor” dessa minha experiência.

Pontos Contra

Os pontos “contra” que listo aqui estão mais relacionados ao contexto em que o projeto esta sendo executado do que “problemas” com o HHVM e o Hack de fato.

1) TEMPO: Utilizar uma nova tecnologia consome um tempo considerável de adaptação e aprendizado, o que afeta diretamente no prazo de entrega. Ou, no caso de tentar cumprir o prazo, provavelmente a qualidade do produto seria prejudicada (péssimo nos dois casos).

2) ADAPTAÇÃO: Embora o processo de “migração” do PHP para o HHVM+Hack seja bem suave, pois a HHVM interpreta tranquilamente o PHP puro, não fazia sentido eu usar a HHVM sem os recursos adicionais que ela oferece (typed annotations, collections, generics). Acontece que a utilização desses recursos mudam completamente a forma de se programar (usando “tipificação forte”), fazendo que você tenha que passar por um processo de “reciclagem” e adquirir novas técnicas de Desenvolvimento. Isso não é necessariamente uma coisa ruim*, mas esse processo consome tempo (vide item 1).


*A recomendação para se tornar um bom Programador é buscar aprender novas linguagens justamente para ampliar sua capacidade de resolver problemas usando paradigmas diferentes.


3) COMPLEXIDADE DO PROJETO: Meu projeto pessoal é uma aplicação em que 90% são operações de CRUDs. Nesse caso a utilização de um Framework, agiliza muito o processo de Desenvolvimento. Utilizando o HHVM, eu corro o risco de me deparar com alguma “incompatibilidade” do HHVM em relação as bibliotecas que costumo usar.
(mesmo que eu não houvesse problemas de compatibilidade, eu teria uma aplicação “hibrida*, uma situação que particularmente eu queria evitar).
*hibrida: código PHP misturado com código Hack.

4) BYE-BYE PHPSTORM: Até o momento só existem plugins do Hack para o Sublime, Vim, Emacs e Atom. Eu teria que abrir mão de usar o PHPStorm o que seria mais uma perda de produtividade (no meu caso especificamente).

5) PHP IS THE BEST (para esse projeto): Usando o HACK com “tipificação forte” pude perceber melhor (e dar mais valor) o como é mais simples e ágil de se programar com PHP. A flexibilidade que se ganha com a “tipificação dinâmica” da um ganho enorme de produtividade. Sei que o PHP não é perfeito (nenhuma linguagem é — IMHO) mas acredito que ele oferece a melhor relação entre Flexibilidade|Robustez|Performance (IMHO again).


Flexibilidade: tipificação fraca/dinâmica, arrays 4 all, linguagem script/interpretada, manipulação de string, built-in functions, etc.
Robustez: Capacidade de suportar projetos com grandes bases de dados, grande volume de acessos (entre outros).
Performance: Interpretar e responder com baixa latência as requisições e baixo consumo de recurso de maquina (load).


Pontos a Favor

1) PERFORMANCE: O ganho de performance com utilização do HHVM é publico e notório. Claramente um ponto positivíssimo ;)

2) SETUP: Uma das vantagens do PHP é o setup (instalação e configuração) simples. O mesmo vale para o HHVM, que oferece pacotes de instalação para as principais Distros Linux e suporte para FastCGI, podendo ser executado nos principais servidores web.

3) NOVA MENTALIDADE: A tempos a comunidade PHP vem pedido por melhorias na linguagem com relação a “tipificação” e “return type” (ver links abaixo). A linguagem Hack oferece todas essas funcionalidades e muitos mais, criando oportunidade para uma nova “mentalidade” de programação graças a: “tipificação forte“, os “Objetos de Coleção“, programação assíncrona, Generics, etc.


PHP RFC: Scalar Type Hints
PHP RFC: Scalar Type Declarations
PHP RFC: Return Type Declarations
PHP RFC: Nullsafe Calls


4) XHP: Essa biblioteca permite que você use fragmentos de XML como expressões do PHP. Uma poderosa ferramenta de “template engine”. Tudo bem que você também pode usar o XHP no PHP (como extensão), mas ela já vem nativo na HHVM. Exemplo:

 

Conclusão

O fato de eu decidir “voltar” ao PHP no meu projeto não significa que o HHVM+Hack é uma tecnologia “ruim”, pelo contrario, gostei muito do que vi e aprendi nesses 3 dias programando com essa linguagem; gostei da sintaxe e dos recursos oferecidos; mas infelizmente, nesse momento, não posso comprometer meu projeto em prol (apenas) de aprendizado.

Fiz questão de compartilhar essa experiência com vocês, para que vocês reflitam melhor caso queriam (também) fazer essa experiência. E também para validar a opinião de outros colegas que no dia do encontro opinaram sobre sermos mais cautelosos com a adoção de novas tecnologias.

That’s all folks!

Sobre Mario Rezende

Trabalha com Desenvolvimento para Web desde 1997 quando iniciou sua carreira como "Webmaster". Começou a programar em 2007 com a linguagem Java passando em seguida para o PHP, hoje sua principal linguagem de Programação. Com passagem por diversas empresas de Internet, entre elas UOL e Dafiti, hoje atua como Desenvolvedor Sênior no e-Commerce da Kanui.com.br.

Mais posts de .

  • Michel Leal

    Olá pessoal.

    Estou concluindo meu TCC no curso de Sistemas de Informação pela Universidade do Estado da Bahia.

    Meu trabalho tem como apresentar resultados de comparações feitas em aplicaões desenvolvidas com PHP e HACK.

    Vou deixar um link de um formulário que traz algumas perguntas sobre PHP e HACK onde usarei as respostas como material para meu trabalho.

    Grato.

    https://docs.google.com/forms/d/1iq5b8YXLXdBO89iOFKU7GtZfXH72gLi17UVqIXW6gkM/viewform?usp=send_form

  • Sid

    Mario, estou pensando em aprender Hack. Eu gostei do teu artigo, mas achei que a chamada não condiz com o teor, pois numa primeira leitura parecia que tinhas concluído que não é um bom recurso, quando, na verdade, é um ótimo recurso que não era necessárioi para o teu projeto, considerando que terias que aprender, se familiarizar e ainda por cima não usufruirias dos novos conceitos da linguagem por não serem relevantes a aplicação onde o CRUD predomina. É isto mesmo? Sabes me dizer como esta linguagem se desenvolveu de lá pra cá? Vale a pena aprender?

  • O Sid (desculpe a demora para responder)
    Com o lançamento do PHP 7 acho que (IMHO) não ta valendo investir em aprender o “HHVM+HACK”, pois o PHP7 tá conseguindo ter o mesmo ganho de performance que a “HHVM” e sem a complexidade de ter que aprender o HACK.