“HipHop”, o tradutor PHP do Facebook – aumenta o desempenho de execução, e também é servidor web
Confirmando o rumor da véspera, o Facebook anunciou mesmo a sua nova ferramenta, batizada de HipHop, que traduz PHP para C++ e aí compila pelo g++ – tendendo uma execução mais rápida, naturalmente.
Também naturalmente, alguns recursos – como o eval() e similares, que executam código-fonte gerado em tempo de execução – ficam prejudicados nessa abordagem, exigindo portanto código que não recorra a este tipo de opção.
E seguindo a sequencia das decorrências naturais, o HipHop não se restringe a um tradutor de código – ele inclui também uma reimplementação adaptada do runtime do PHP, e uma reescrita de várias extensões comuns do PHP para tirar proveito da novidade.
Segundo o Slashdot, o Facebook já está rodando o HipHop em produção há meses, e hoje ele está por trás de 90% de seus servidores – substituindo inclusive o próprio servidor web, pois ele faz o trabalho completo.
Mas a expectativa do articulista de lá, compartilhada por mim, é que a partir da disponibilização do código sob a licença livre escolhida, não vá demorar até alguém lançar as alterações ou complementos que permitirão rodar o HipHop sobre o Apache, ou outro servidor à escolha do freguês. (via lwn.net)
Só corrigindo, Apache não é um navegador e sim um servidor de páginas.
Só um detalhe: Apache não é navegador.
É verdade. Já destroquei as palavras. Grato.
Desculpe-me pela ignorância,
Pra que esse trabalho todo convertendo de PHP para C++?! Não seria mais fácil contratar programadores C++???
@Wesley – Talvez porque desenvolver programas WEB em PHP e seus frameworks seja muito mais rápido que em C++.
C++ provê código web? Nunca vi pelo menos. Por isso, usaram PHP e ‘transformaram’ em web.
@Anderson Fraga – C++ pode sim gerar código web, mas o trabalho para conseguir fazê-lo é monstruoso. Existem alguns frameworks tentando fazer isso, dê uma pesquisada.
@Wesley
“One common way to address these inefficiencies is to rewrite the more complex parts of your PHP application directly in C++ as PHP Extensions. This largely transforms PHP into a glue language between your front end HTML and application logic in C++. From a technical perspective this works well, but drastically reduces the number of engineers who are able to work on your entire application”
Enquanto não tiver o código pra rodar e compilar alguma coisa pra fazer benchmark, pra mim é vapor total isso aí, apesar da idéia ser interessante e pode levar o desenvolvimento com php para outros níveis jamais pensados!
Meus pitacos para quem quiser ler: http://www.zaip.net/hiphop-for-php
[]‘s
Alex
@Anderson Fraga, tecnicamente vc pode programar pra web com qualquer linguagem capaz de escrever na saída padrão (stdout). Existem bibliotecas que permitem programar em c++ pra web de forma tão natural quanto em PHP.
Vc pode até pegar um interpretadores como o spidermonkey, da mozilla, e criar programas em javascript que rodam no servidor de forma ligeiramente fácil.
Common Gate Interface, ou CGI é o nome disso tudo.
Hey, mas já existiam outros compiladores para PHP, pq todo este estardalhaço por causa deste em especial. Tá, talvez por ser de uma grande empresa. É. vou experimentar.
@Juan, @tenchi
Não sabia disso não. Fiquei até curioso!
Obrigado pelas explicações ;)
@tenchi – Você falou em CGI e acabei recordando o tempo em que era possível programar para a WEB usando o Delphi =D
Considerando a portabilidade e a quantia de otimizações já existentes nos compiladores C e C++ não é nenhuma novidade que mais e mais linguagens estejam suportando a geração de código C/C++ ao invés de gerar código objeto diretamente. Será que estamos enxergando uma tendência aí?
Não seria mais interessante colocar um JIT no PHP que fazer esse xunxo ?
Interessante, espero por um benchmark disso.
C/C++ são linguagens maravilhosas. São rápidas como a luz, são escláveis, são padronizadas, possuem base de uso enorme e por ai vai.
Sempre foi possível programar para a web em C/C++. Já citaram acima os famosos CGI.
Qualquer pessoa seguindo um tutorial pego no Google pode compilar e sair usando seu próprio aplicativo web que escuta na porta X e serve os dados pedidos à ele. Isso é tranquilo.
Sobre o HipHop PHP, a idéia não é nova mas possui grande possibilidade de emplacar em atividades que precisam de desempenho. Grandes portais por exemplo ou então aplicações de comunidade como o próprio Facebook.
A parte legal é que durante a apresentação oficial que foi esta madrugada (1:30 hora de Brasília), disseram que o objetivo do HipHop é o programador poder aproveitar o legado PHP que é imenso e intensamente em desenvolvimento hoje. Traduzir PHP atual para C++ de forma quase transparente faz você pensar em compilar daqui um tempo um grande portal WordPress por exemplo. Ele vai voar e sem muito custo para trazer ele para este novo patamar de desempenho.
Outra coisa legal, é a massa crítica que o Facebook possui. Ele é grande, desenvolve muito, abriu todo o código pra qualquer um usar e vai continuar a desenvolve-lo, já que eles próprios são usuários alvo da ferramenta.
Ou seja, o Facebook vai continuar a desenvolver em PHP mas portará partes críticas para o C++ com o HipHop.
Ótimo para o PHP e ótimo para todos que agora vislumbram uma forma tranquila de ter desempenho que era obtido só com o uso de clusters de 2 ou 3 máquinas rodando PHP puro otimizado em um simples servidor.
Isso corta custos, otimiza estrutura, energia e mão-de-obra, além de ser aberto e poder ser usado por todos.
Aqui já baixamos via Git e estamos compilando para testar a solução. O Facebook já usa em produção. Se der certo, vamos começar a usar também.
Discussão interessante… :D
Continuo achando que um JIT seria mais do que suficiente… nao precisava reinventar a roda.
Interessante. uso o Zend Guard para proteger os códigos. Esperar esse HipHop para ver se vai servir para o mesmo proposito.
O Hip-Hop é muito bom para a comunidade PHP. Mas pelo menos agora no início poucos vão se beneficiar dele. O mundo PHP é composto por hosts compartilhados, e o gargalo de performance geralmente não é processamento ou memória mas sim I/O.
Será que é possível utilizar isso com PHP-GTK?
Iria ser muito interessante se isso fosse possível.
@André Luis Pereira, você baixou como os fontes?
Até agora os endereços do github não parecem ativos…
[]‘s
Rafael Goulart
@Dyego, como assim usar JIT?
Vc quer dizer que seria melhor compilar on-the-fly do PHP para linguagem de máquina?
A vantagem de usar uma linguagem de “alto” nível intermediária é justamente não ter que lidar com assembly de diversos processadores diferentes, mesmo restrito há uma arquitetura, ainda vejo vantagem.
Ou seja, foi muito mais rápido mapear as funções do PHP para C++ do que fazê-lo para assembly. Aposto que não o fizeram para C, pelo mesmo motivo, teriam que implementar a orientação a objetos que a C++ já têm.
JIT = Just In TIME…
Isso sim eh algo transparente… nao ficar traduzindo linguagem para uma outra e depois compilar…
Todas as linguagens modernas utilizam-se deste artificio, inclusive a velocidade do Chrome quanto ao JavaScript vem desse adendo..
Fazendo um JIT pro php voce pode ganhar MUITO MAIS… TODOS poderiam utilizar-se desta vantegem, sem ficar passando “tradutor” no seu codigo…
Tradutores de PHP pra alguma coisa existem as dezenas… para variar invez de uma solucao definitiva o mundo opensource continua a lançar “muletas” como se fossem “a invenção do seculo”
Dyego, me parece que o que você está advogando é uma solução que seria mais interessante para você, ou mesmo para outros interessados.
Mas não tenho dúvida de que o pessoal do Facebook (e não “o mundo open source”) preferiu fazer a alternativa que para eles seria mais interessante – e para eles era esta compilação prévia com um passo intermediário em C++.
Que bom que eles resolveram disponibilizar a solução deles, e com código aberto, para o caso de alguém mais se interessar. Eu certamente me interessei. Caracterizá-la como um mero tradutor de PHP, aliás, é bem impreciso – a mesma ferramenta cuida de bem mais coisas, oferecendo inclusive o servidor web otimizado pra essa finalidade.
Se é verdade que para eles resultou em redução de 50% de uso de CPU dos servidores que estavam em produção antes com o PHP normal (e em um serviço tão intenso como é o deles), quem dera “o mundo open source” arranjasse “muletas” assim mais frequentemente.
Pra quem prefere JIT, tem já quem esteja desenvolvendo. Aliás, nem é o único. Provavelmente atingirão um resultado mais ao teu gosto, especialmente se os apoiares nisso.
Mas o ponto do meu comentário é que não é porque milhões de pessoas prefeririam JIT que o Facebook necessariamente deveria preferir o mesmo, ou implementar uma solução para estes milhões de pessoas. Ele fez o que interessava a si, e ainda fez a gentileza de disponibilizar.
Eu não vi até agora como funciona na prática, o esquema do Facebook. Mas eu acredito que vc tenha arquivos .php num diretório, execute algo como:
fbPHP -o programa programa.php
Ou seja, eu acho que vc não têm que lidar com nada C++, o g++ vai ser chamado por baixo pelo próprio compilador PHP.
Se não for assim, se automatiza tudo com um Makefile. Ex.: eu tenho um programa aqui que têm uns arquivos .lex e .yy, que vão ser convertidos em .cpp (C++), mas eu não me interesso em ver esse código C++ resultante, se existirem erros eu só lido com o .lex e .yy. não me interessa nem os arquivos .o resultantes deles, me interessa só o executável final.
Concordo que a maneira JIT é mais fácil, vc não se preocupa nem com o executável final. Mas acho que o pessoal adapta o esquema para que funcione assim. Só que não deve ser tão rápido para compilar.
O meu comentário foi mais para dizer que o pessoal levaria mais tempo para fazer um compilador para linguagem de máquina, coisa que acredito que é o que a maioria desses JIT faça.
Augusto,
Para mim ? Vc acha que uma implementacao de um JIT ajudaria UMA pessoa ? Ajudaria INSTANTENEAMENTE TODOS OS USUARIOS DE PHP DO MUNDO… sem alterar UMA LINHA DE CODIGO , sem mecher em NADA o cara vai ter performance de codigo nativo…
O faceBook fez o que é mais facil , nao o que é mais correto.
O correto é ajudar a todos , pois todos programaram o php para ajudar tambem ao facebook…
Me desculpe, quem intende um pouco de compiladores , vai saber o que disse com a palavra “muleta”….
E sim , o mundo opensource é cheio delas, xunxos vendidos como “O GRANDE AVANCO” , bem igual a Microsoft faz…
Sou um defensor do Software Livre , mas não sou cego para admitir suas falhas e nem burro de escolher ele quando existem alternativas não-livres melhores e que são desenhadas para tal.
Me desculpe Augusto , mas OSS não é a resposta para tudo.
O mais legal foi ‘gentileza’…
Quer dizer , ela ganha bilhoes utilizando um software livre , e na hora de devolver algo a comunidade ela faz uma ‘gentileza’….
Que bom hein ?
Dyego, não há necessidade de se desculpar por responder a mim negando algo que eu não disse. Não se preocupe. E note que em lugar algum eu disse que OSS é a resposta para tudo, ou que não existem soluções superiores. Pelo contrário, acredito que OSS não é resposta para tudo, e que sempre podem existir soluções superiores a uma implementação qualquer.
Voltando ao assunto que eu estava de fato debatendo, tomara que toda vez que alguém faça as coisas pelo caminho mais fácil, e não o mais correto na sua opinião, chegue a resultados parecidos: ganhe também 50% de desempenho, e ainda compartilhe a sua solução para quem mais tiver interesse e situações similares.
Além disso, torço para que pelo menos 1% das pessoas que acham que um JIT para PHP é uma demanda premente e “ajudaria INSTANTENEAMENTE TODOS OS USUARIOS DE PHP DO MUNDO… sem alterar UMA LINHA DE CODIGO , sem mecher [sic] em NADA” esteja fazendo algo em prol dos projetos existentes para dotar o PHP de um bom JIT.
Certamente esta não é a obrigação do Facebook – e se eles acharam que para o tamanho do pé deles, o melhor sapato seria a compilação prévia via tradução para C++, implementaram isso e ainda fizeram a gentileza de compartilhar conosco (já que não eram obrigados a isso – quanta gente ganha muito com código aberto e não compartilha seu próprio código por aí, exatamente nos termos em que a licença permite?), o que há a criticar nisso? Os resultados estão aí. Quando alguém implementar um bom JIT, poderemos compará-los.
Sua opinião de que “o mais correto seria ajudar a todos” certamente é bem positiva e otimista, e torço para que você a use em sintonia com o que mencionei no terceiro parágrafo deste comentário.
@Rafael Goulart
Estava aberto neste endereço: http://github.com/facebook/hiphop-php/
Baixamos de madrugada quando abriram ainda durante a apresentação (1:30 da manhã). Aparentemente fecharam novamente.
Voce não fala que é a unica resposta, mas age como se fosse. É intrínseco da sua pessoa, ainda mais com a sua concepção de “gentiza”.
Se voce traduzir um .bat para .c e compilar fica mais rapido tambem… voce é do tipo maquiavel ? Os fins justificao os meios ? Por favor… voltemos a 1526 então…
Espero tmb, nao utilizo PHP , mas a ideia de ficar “Traduzindo codigo” é deprimente… salvo quando a plataforma exige… e não tem o que fazer, para fazer passar uma laranja num local que só passa um limão… temque-se apelar, mas não é o caso.
Quanto ao seu “[sic]” mostra como realmente você não entendeu como funciona um JIT, por favor leia , depois vc faz piadinhas mais interessantes. (e menos nerd)
Agora , eu to achando o seu conceito de “gentileza” bem legal , queria ver se o pessoal do PHP (os programdores) achao divertido… quem sabe uma troca né ? Eu te dou um lixao que muito provavelmente só a minha empresa vai conseguir usar em larga escala e em troca eu vc me dá uma linguagem/interpretador facil para que eu ganhe bilhoes. Realmente bem justo :)
Agora com certeza , se eu utilizasse o PHP para algo realmente importante e ganhasse BILHOES com ele, certamente iria contribuir com algo que não fosse apenas uma “gentileza”.
opa , “gentiza” voce troca por “gentileza” h0h0h0
Não, acho que quem está agindo como se a alternativa dada pelo Facebook fosse a única é você. Não é. Há outras por aí, como eu mesmo já mencionei. A deles não tem a intenção de ser um JIT, mas outras têm, embora o criador da linguagem já tenha deixado claro que não é grande fã da ideia.
O meu [sic] na verdade mostra que eu sei como se escreve a palavra “mexer”, mas não quis modificar o seu texto na citação.
E também acho bem interessante o seu conceito de liberdade de código, no qual a retribuição de código por parte dos usuários que ganham algo com o código é algo exigido e chamado de “devolução”, e quando não satisfaz ao que você queria, pode ser comparada a um “lixão” e chamada de injustiça com os desenvolvedores que escolheram licenciar daquele modo.
@Dyego Souza do Carmo
Devo dizer que foi uma bela gentileza do Facebook, viu.
Chamar de gambiarra só porque é semi-automático e não automático como um JIT, é muito simplista.
O ganho de performance é absurdo. Será usado só em ambientes controlados, provavelmente. Não dá pra usar solto por ai em ambientes compartilhados. (provavelmente a maioria dos admins não quer deixar os compiladores disponíveis para todo mundo usar em seus servers PHP)
Para esses ambientes compartilhados, realmente seria muito legal que alguém tenha conseguido algo plenamente utilizável com JIT e PHP e que pudesse ser adotado em larga escala sem precisar mudar nada em código fonte PHP.
Cada um na sua: ambientes controlados com código nativo e compartilhados com JIT PHP (no dia em que ele ficar disponível).
Ai voce chegou a um ponto que eu estou falando… não comento como se fosse a unica , e com certeza não é, mas é lançado como se fosse a “resposta” e muitos comentarios aqui sao relativos a isso… fora que o lançamento foi bem “microsoft” , a tão mal falada empresa do “mau”. É o como fazem com as coisas do Google , “se é google é bom”.
Quanto ao sic , não pareceu isso. Mas tudo bem.
Ué, voce leu em algum lugar o meu conceito de liberdade de codigo ? Eu escrevi isso em algum lugar ? Estas a botar palavras em meu texto, estou falando do “justo” e não conceituando liberdade de codigo.
Quanto a licença ela é bem clara, só não me venha falar em “gentilezas” de uma empresa que lucra em cima de algo que não contribui um centavo. Assertividade e empatia não são coisas empregadas pelo FaceBook, mas deixa pra lá né ? Ele são tão gentis !! Viva !