Sortie de HipHop pour PHP par les développeurs du réseau social FaceBook

Le , par Doksuri, Membre expérimenté
Mise à jour du 03.02.2010 (Katleen Erna)
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.

voila, c'etait pour avoir des avis dessus...
parceque 80% d'usage CPU c'est pas negligeable quoi !


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Phelim Phelim - Membre confirmé http://www.developpez.com
le 05/02/2010 à 21:04
Citation Envoyé par metagoto  Voir le message
Je ne dirai pas que "Zend est nul". Et puis il ne suffit pas de compiler avec g++. Il faut générer le code c++ au préalable. Zend ne peut pas faire ça en un claquement de doigt. Personne ne peut faire ça. Ca a pris 3 ans à une équipe de gros geeks chez facebook

Si je me souviens des interviews que j'ai lu de Rasmus Lerdof, il est très clair sur les limites du PHP et conseille dès que possible de développer une extension en C++.

Je ne connais pas spécialement la feuille de route par rapport à l'API Zend, ni le fonctionnement détaillé de cet API.

J'espere que Zend ne suit pas la même voie que Facebook et se focalise davantage sur l'évolution de l'api interne de PHP pour l'intégrer à l'architecture objet de PHP.

Actuellement les extensions de PHP fonctionne sur un shéma fonctionnel.

Néanmoins si demain il devient possible de structurer une API avec un format objet utilisable dans PHP, Zend aura réellement fait un pas extraordinaire.

Les frameworks abandonneront peut etre le tout PHP pour se focaliser sur le déploiement d'une architecture optimisée en terme de performance.

Mieux, le pas effectué par Facebook permettra de générer d'envisager de générer du code C++ qui s'intégre à l'API de Zend pour migrer certain système tout PHP pour la performance.

Les perspectives ouvertes seraient extraordinaires. Nous conserverions la simplicité de PHP pour les personnes souhaitant l'utiliser de façon simple (page personnelle, site à faible montée en charge) et aurions un socle commun solide et performant (le passage de l'un à l'autre pouvant se faire naturellement en changeant de langage).

PHP ne serait plus un langage à part entière mais une surcouche du C / C++ (un peu comme le LUA pour le monde du jeu vidéo). (même si dans la pratique, il l'est depuis un bon moment déjà, on l'oublie facilement)

Par une telle évolution, PHP gagnerait ses lettres de noblesse en temps que langage de développement pour le web (sans perdre sa véritable identité)
Avatar de metagoto metagoto - Membre éclairé http://www.developpez.com
le 05/02/2010 à 22:05
Citation Envoyé par Phelim  Voir le message
Si je me souviens des interviews que j'ai lu de Rasmus Lerdof, il est très clair sur les limites du PHP et conseille dès que possible de développer une extension en C++.

Je ne connais pas spécialement la feuille de route par rapport à l'API Zend, ni le fonctionnement détaillé de cet API.

J'espere que Zend ne suit pas la même voie que Facebook et se focalise davantage sur l'évolution de l'api interne de PHP pour l'intégrer à l'architecture objet de PHP.

Actuellement les extensions de PHP fonctionne sur un shéma fonctionnel.

Néanmoins si demain il devient possible de structurer une API avec un format objet utilisable dans PHP, Zend aura réellement fait un pas extraordinaire.

Les frameworks abandonneront peut etre le tout PHP pour se focaliser sur le déploiement d'une architecture optimisée en terme de performance.

Mieux, le pas effectué par Facebook permettra de générer d'envisager de générer du code C++ qui s'intégre à l'API de Zend pour migrer certain système tout PHP pour la performance.

Les perspectives ouvertes seraient extraordinaires. Nous conserverions la simplicité de PHP pour les personnes souhaitant l'utiliser de façon simple (page personnelle, site à faible montée en charge) et aurions un socle commun solide et performant (le passage de l'un à l'autre pouvant se faire naturellement en changeant de langage).

PHP ne serait plus un langage à part entière mais une surcouche du C / C++ (un peu comme le LUA pour le monde du jeu vidéo). (même si dans la pratique, il l'a toujours été, on l'oublie facilement)

Par une telle évolution, PHP gagnerait ses lettres de noblesse en temps que langage de développement pour le web (sans perdre sa véritable identité)

Plusieurs choses.
Tout d'abord, il y a un léger courant qui tend à promouvoir un nettoyage de l'API de php. Cela concerne le développement même du core de php/ZE et aussi les extensions.
http://wiki.php.net/rfc/remove_zend_api
http://wiki.php.net/rfc/php_native_interface
Franchement, je pense que ça ne se fera pas. Il faudrait pratiquement tout réécrire de zero. php a une trop longue histoire et trop de patches derrière lui. php 6 ne prend pas cette direction, ça ne va pas arranger les choses.

Ce que fait hiphop (d'après ce qu'on peut lire à droite et à gauche) ne va pas dans le sens de "générer du code C++ qui s'intégre à l'API de Zend". En fait hiphop se débarrasse le plus tôt possible de tout ce qui a un rapport avec php et son runtime. hiphop prend des fichiers sources php en l'entrée mais après tout le boulot consiste à se débarrasser de php. Donc de ce point de vue là, je doute que cela soit d'une grande utilité pour garder ou améliorer de quelconques liens avec php (son runtime).

Dans la conférence en video de hiphop (voir les liens dans cette thread), ils disent bien que les extensions php actuelles (en C ou C++) doivent être entièrement réécrites pour hiphop (et d'ailleurs ce n'est pas étonnant). Moi c'est le truc qui m'interesse le plus en fait, car ça implique la mise à disposition d'une API/lib/framework en C++ pour hiphop. On a donc un peu le meilleur des 2 mondes: on peut coder en php mais aussi "étendre" les possibilités en codant directement en C++. Là je fais confiance à facebook pour que leur API soit plus propre que celle de Zend. Dans une même veine, on a un autre projet de facebook: http://developers.facebook.com/phpembed/docs/index.html qui lui facilite l'intégration du runtime php dans une appli host.

En tout cas, je ne pense pas que php ait eu à attendre hiphop pour gagner ses lettres de noblesse. Rien que le fait que facebook repose (ou reposait, OK) en grande partie sur php suffit pour assoir les qualités émérites de ce langage de script.
Avatar de - http://www.developpez.com
le 06/02/2010 à 5:12
Citation Envoyé par metagoto  Voir le message
En tout cas, je ne pense pas que php ait eu à attendre hiphop pour gagner ses lettres de noblesse. Rien que le fait que facebook repose (ou reposait, OK) en grande partie sur php suffit pour assoir les qualités émérites de ce langage de script.

+1 auquel il faut aussi ajouter yahoo (flickr etc...) qui n'est pas rien non plus.
Avatar de Baptiste Wicht Baptiste Wicht - Expert éminent sénior http://www.developpez.com
le 07/02/2010 à 17:25
Le créateur de PHP a répondu à quelques questions sur HipHop ici.

C'est en anglais, mais c'est plutôt intéressant.
Avatar de Aquaa Aquaa - Inactif http://www.developpez.com
le 08/02/2010 à 15:17
Citation Envoyé par mon_nom_est_personne  Voir le message
+1 auquel il faut aussi ajouter yahoo (flickr etc...) qui n'est pas rien non plus.

yahoo tourne sous php ?
Avatar de jpvincent jpvincent - Membre éclairé http://www.developpez.com
le 09/02/2010 à 9:39
Citation Envoyé par Aquaa  Voir le message
yahoo tourne sous php ?

yes they do (j'y ai bossé) et ils se sont même payé Rasmus pendant quelques années, pour de la formation et du développement de la version interne de PHP
Avatar de Aquaa Aquaa - Inactif http://www.developpez.com
le 23/02/2010 à 16:54
d'après ce comparatif entre les différents compilateurs php existant dont HipHop, il n'est pas le plus.
http://www.phpclasses.org/blog/post/...rformance.html
Avatar de Mikushi Mikushi - Candidat au Club http://www.developpez.com
le 25/02/2010 à 18:34
J'ai eu l'occasion de tester HipHop de maniere intensive depuis mi-Janvier.
Globalement c'est une grosse deception, lorsqu'on le compare aux alternatives que sont PHC et Roadsend PCC, HipHop est assez loin derriere, et n'offre aucun avantage vis a vis de la concurrence.
Le gain de performance annonce par Facebook est bel et bien present, mais 50% n'est vraiment pas grand chose, avec PHC j'ai eu des gains montant jusqu'a 200%.
Mais il faut replacer HipHop dans son contexte, pour une entreprise tel que Facebook, ou 90% du code base est en PHP, il est juste inimaginable de tout reecrire en C/C++, le temps que cela prendrait est juste enorme, HipHop se presente a Facebook comme une solution rapide d'ameliorer les performances de leur existant, tout en passant a des solutions plus rapides pour leur nouveaux developpements.
C'est une discussion que j'ai eu l'an dernier avec Marcus Börger de chez Google, si on souhaite vraiment avoir un gain de performance substantiel en PHP, l'unique solution est de se tourner vers l'ecriture d'extensions, c'est ce que font Google, Yahoo et les autres quand ils utilisent PHP, comme le dit jpvincent plus haut Yahoo est majoritairement sous PHP, a titre de "template langage" et derriere un nombre enorme d'extensions maisons.

Bref, personnelement je ne vois rien qui soit vraiment interessant dans HipHop (ou meme les alternatives), tant le gain est assez ridicule. Si vous souhaitez ameliorer les performances de vos applications, soit vous les decoupez de maniere a pouvoir utiliser differents langages la ou ca fait du sens (typiquement nous on utilise des combinaisons de PHP/Python/C a differents noeuds de nos sites/applications), soit vous vous mettez serieusement a l'ecriture d'extensions si vous n'etes pas famillier d'autres langages que PHP/C.
Avatar de metagoto metagoto - Membre éclairé http://www.developpez.com
le 26/02/2010 à 8:04
@Mikushi

Des benchmarks de divers compilers php:
http://www.phpclasses.org/blog/post/...rformance.html

HipHop est celui qui performe le mieux dans ces résultats. On notera que Roadsend n'a pas été pris en compte pour cause de bug (et sa nouvelle branche, Raven, non plus)

Jusqu'à très récemment (hier en fait), les optimisations de base (flags g++) n'étaient pas activées pour les binaires générés par hiphop. phpclasses.org a mis à jour son article. Le gain en perf est substantiel.

Le "problème" avec les extensions php, est que le runtime reste celui de php. Selon la nature des extensions, le gain n'est pas forcément conséquent. Mais il est clair que passer par une extension est la solution à privilégier avant de s'embarquer dans des solutions telles que hiphop.

hiphop est non seulement la solution de facebook pour remplacer apache+php, mais c'est aussi le moyen de réutiliser leur code base php conséquent pour s'interfacer avec d'autres langages. Apparemment facebook ne veut pas forcément réécrire des codes en python ou que sais-je encore. hiphop a un mode pour générer des librairies compatibles avec SWIG. Il s'agit donc bien plus qu'un simple compiler php, c'est un outil central (pour facebook tout du moins).
Avatar de Mikushi Mikushi - Candidat au Club http://www.developpez.com
le 03/03/2010 à 0:28
Citation Envoyé par metagoto  Voir le message
hiphop est non seulement la solution de facebook pour remplacer apache+php, mais c'est aussi le moyen de réutiliser leur code base php conséquent pour s'interfacer avec d'autres langages. Apparemment facebook ne veut pas forcément réécrire des codes en python ou que sais-je encore. hiphop a un mode pour générer des librairies compatibles avec SWIG. Il s'agit donc bien plus qu'un simple compiler php, c'est un outil central (pour facebook tout du moins).

J'irais pas dire le contraire, puisqu'il a ete assez claire de la part de FB a la mi-Janvier que la version actuelle est vraiment oriente Facebook. Et c'est aussi pourquoi ils l'ouvrent a l'openSource, pour que la communaute l'adapte a un usage plus general.
En attendant je pense que les cas d'utilisations de HipHop reste tres restraint, et meme dans le tres haut traffic/high availability on l'a vite oublie tellement ca vaut le coup d'investir dans des langages/solutions plus robustes, surtout compte tenu du fait qu'on a pas un code base aussi enorme que celui de Facebook.
Avatar de metagoto metagoto - Membre éclairé http://www.developpez.com
le 03/03/2010 à 8:27
@Mikushi

Je me trompe peut être, mais je ne serai pas étonné que d'ici quelques temps, hiphop soit utilisé sur de nombreux sites, et pas forcément de "très" gros sites.
Je ne serai pas non plus étonné que des sites qui utilisent actuellement une technologie quelconque pour leur système d'API passent discrètement à hiphop. Pourquoi pas twitter ?

Certaines extensions très usuelles ne sont pas encore dispos pour hiphop (je pense à session, pdo, memcache..). L'utilisation de hiphop en production doit être actuellement très limitée (cependant, sur la mailing-list, on apprend que certains font déjà tourner hiphop en prod). De plus, le build system de hiphop est limite archaïque. A base de CMake il n'est franchement pas user-friendly ni aussi fonctionnel que celui de PHP par exemple en ce qui concerne l'ajout/dev d'extensions. Les developers de Hiphop sont en train de bosser sur ce problème.

Dans quels langages/solutions plus robustes voudrais-tu investir ? Apparemment, facebook a considéré un passage à python, java et du plain c++ après avoir contribué à améliorer php et surtout APC. Mis à part le c++, ces solutions alternatives ne leur donnaient pas satisfaction (en terme de perf, mémoire, scalabilité, déploiement..). hiphop est une sorte de projet désespéré pour tenter de concilier la facilité de développement de php et les caractéristiques des applications natives (code compilé). Ces avantages sont dorénavant disponibles pour toute la communauté (moyennant le fait que hiphop soit buggé et trop jeune en général). "investir" dans hiphop sera probablement une solution plus simple et moins couteuse pour pas mal d'acteurs plutôt que de changer radicalement de plateforme/langage.
Offres d'emploi IT
Responsable support Télécom fan de VAS et d’innovation – H/F
Mobiskill - Ile de France - Paris (75000)
Developpeur expérimenté web et mobile
CaraMaps - Ile de France - Bordeaux (33000)
Paris - Développeur PHP
esabora - Ile de France - Paris (75013)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique PHP