Facebook dévoile sa ré-écriture de PHP, HipHop traduit PHP en C++ puis le compile avec g++
L'information vient d'être officiellement confirmée par Facebook, suite a de nombreuses rumeurs sur la toile qui anticipaient son annonce. Il se murmurait ici et là qu'une équipe du réseau social aurait travaillé sur un nouveau compiler PHP JIT (Just In Time) qui permettrait des augmentations de vitesse allant jusqu'à 80%.
Le projet serait assez similaire à l'Unladen Swallow de Google, qui avait consisté en une ré-écriture du compiler de Python.
Le projet des équipes de Facebook s'appelle HipHop et il est disponible depuis cet après-midi en open-source. Il résulte d'un travail acharné et secret de deux longues années.
Mais contrairement à ce qui était attendu, HipHop consiste en fait en une ré-écriture du runtime de PHP. Le code source de PHP est traduit en C++ puis compilé avec g++.
Un ingénieur ayant travaillé sur le projet, Haiping Zhao, déclare : "Avec HipHop, nous avons réduit l'usage du CPU sur nos serveurs web d'environ 50%".
Ceci devrait permettre d'allèger le datacenter de Facebook.
"HipHop execute le code source d'une manière sémantique et en sacrifie certaines fonctionnalités peu utilisées, comme eval(), pour de meilleures performances. HipHop nous permet de corriger la logique de l'assemblage final d'une page en PHP.", continue-t-il.
Il conclut en indiquant que PHP et C++ partagent pratiquement la même syntaxe, mais que C++ est ien moins gourmand en ressources système.
RideKick : Mise à jour 02/02/2009
Sortie de HipHop pour PHP par les développeurs de FaceBook
Comme annoncé, une équipe réduite de FaceBook a développé un inerpreteur de code PHP. En accord avec l'annonce officielle, HipHop n'est pas un compilateur mais plutôt un convertisseur de code PHP vers C++ qui sera ensuite compilé par g++.
HipHop éxecute donc le code PHP sémantiquement et il faudra donc s'attendre à abandonner quelques fonctions propres à PHP au profit des performances comme eval().
HipHop intègre un convertisseur mais aussi une nouvelle implémentation du runtime PHP et une version réécrite des plusieurs librairies communes pour tirer profit au maximum des performances.
Comment fonctionne HipHop ?
HipHop créé donc du code static qui fait le lien vers les fonctions et variables PHP statiques, ce qui représente une grande part des scripts actuels (en comparaison du code dynamique qui peut être généré avec PHP)
Le process de conversion comprends 3 phases importantes :
- Une analyse statique dans laquelle HipHop collecte des information sur qui déclare quoi et sur les dépendences.
- L'inférence de type dans laquelle on choisit le type de variable C++ correspondant le plus approprié (scalaire, chaîne de caractères, classe, objet, variant etc ...)
- La génération du code qui pour la grande part revient à faire la correspondance entre les états et les expressions PHP en "tats et expressions C++
Ci joint un diagramme de process du fonctionnement de HipHop
Bonjour amis phpeurs,
un ami a moi a retenu mon attention quand il m'a parle d'un "nouveau php" qu'il avait lu sur le net.
voici donc l'article en question : il s'agit d'un employe facebook qui repond a quelques questions (ses reponses font plus ou moins peur)
mais la ou ca devient perturbant : c'est vers la fin :
Rumpus: So tell me about the engineers.
Employee: They’re weird, and smart as balls. For example, this guy right now is single-handedly rewriting, essentially, the entire site. Our site is coded, I’d say, 90% in PHP. All the front end — everything you see — is generated via a language called PHP. He is creating HPHP, Hyper-PHP, which means he’s literally rewriting the entire language. There’s this distinction in coding between a scripted language and a compiled language. PHP is an example of a scripted language. The computer or browser reads the program like a script, from top to bottom, and executes it in that order: anything you declare at the bottom cannot be referenced at the top. But with a compiled language, the program you write is compiled into an executable file. It doesn’t have to read the program from beginning to end in order to execute commands. It’s much faster that way. So this engineer is converting the site from one that runs on a scripted language to one that runs on a compiled language. However, if you went to go talk to him about basketball, you would probably have the most awkward conversation you’d have with a human being in your entire life. You just can’t talk to these people on a normal level. If you wanted to talk about basketball, talk about graph theory. Then he’d get it. And there’s a lot of people like that. But by golly, they can do their jobs.
Rumpus: So what will be the net effect of running the site on Hyper PHP?
Employee: We’re going to reduce our CPU usage on our servers by 80%, so practically, users will just see this as a faster site. Pages will load in one fifth of the time that they used to.
Rumpus: When’s it coming out?
Employee: When it’s done. Next couple of months, ideally.
Employee: They’re weird, and smart as balls. For example, this guy right now is single-handedly rewriting, essentially, the entire site. Our site is coded, I’d say, 90% in PHP. All the front end — everything you see — is generated via a language called PHP. He is creating HPHP, Hyper-PHP, which means he’s literally rewriting the entire language. There’s this distinction in coding between a scripted language and a compiled language. PHP is an example of a scripted language. The computer or browser reads the program like a script, from top to bottom, and executes it in that order: anything you declare at the bottom cannot be referenced at the top. But with a compiled language, the program you write is compiled into an executable file. It doesn’t have to read the program from beginning to end in order to execute commands. It’s much faster that way. So this engineer is converting the site from one that runs on a scripted language to one that runs on a compiled language. However, if you went to go talk to him about basketball, you would probably have the most awkward conversation you’d have with a human being in your entire life. You just can’t talk to these people on a normal level. If you wanted to talk about basketball, talk about graph theory. Then he’d get it. And there’s a lot of people like that. But by golly, they can do their jobs.
Rumpus: So what will be the net effect of running the site on Hyper PHP?
Employee: We’re going to reduce our CPU usage on our servers by 80%, so practically, users will just see this as a faster site. Pages will load in one fifth of the time that they used to.
Rumpus: When’s it coming out?
Employee: When it’s done. Next couple of months, ideally.
parceque 80% d'usage CPU c'est pas negligeable quoi !