Facebook à annoncé hier la sortie en bêta de son dernier bébé : hip hop for php. Cela fait deux ans que facebook travaille sur hip hop for php et les résultats encourageants de cet outil (en moyenne 50% d’utilisation processeur en moins suivant les pages) les ont conduits à proposer hip hop php sous licence PHP. Autrement dit, tout le monde peut l’utiliser et accroitre ses performances!
Hip Hop for php : c’est quoi?
Hip hop n’est pas tout à fait un compilateur. C’est plutôt un transformateur de code qui va transformer votre PHP en C++. C’est ensuite ce C++ qui va être compilé avec g++ (gcc
). Il faut savoir que PHP est écrit en C et qu’il est possible de lui rajouter des extensions en C et C++. Ces extensions ont le mérite d’être ultra performante! Seul problème, ce n’est pas donné à tout le monde (savoir faire du PHP et du C++ et enfin créer des extensions à PHP en C++…). La solution fût donc de transformer le PHP en C++ puis de le compiler afin de bénéficer des avantages en termes de performances des langages compilés versus les langages interpretés.
Hip Hop : ça marche comment?
Le principe est plutôt simple. Sans que vous ne changiez rien à votre façon de coder, hiphop pour php va procéder à trois grande actions.
La première étape va être une analyse statique du code : qui appelle quoi, quelles sont les dépendances. Ensuite hiphop va trouver les meilleures correspondances de types de variables entre PHP (qui est un langage très peu typé) et C++ qui est fortement typé. Et enfin, hiphop va faire correspondre les expressions et déclarations PHP à leurs équivalentes en C++ (les deux langages dérivent du C).
G++ pourra alors faire son travail de compilation pour obtenir un code compilé et donc plus rapide.
Au niveau du processus de développement, un autre outil est mis à disposition : HPHPi. C’est un interprète qui va vous permettre de tester votre code sans pour autant le compiler. De cette manière vous ne changez rien à vos processus de développement.
Résumé de la keynote de présentation de HipHop pour PHP
J’ai regardé la keynote de présentation de Hiphop. Je vous propose un petit résumé. rien de transcendant (c’est pas une keynote apple quoi
) et la plus part des informations données était dans ce billet.
- PHP est un langage facile à apprendre et à mettre en place mais il fait parti avec PERL des langages « web » les plus consommateur de CPU
- Vu la charge de Facebook (400 milliards de pages vues par mois) il était nécessaire de trouver une solution.
- la réécriture de Facebook dans un langage plus performant? Pas possible sans stopper le développement de la plate forme (voir la roadmap…)
- transformer toutes les parties du code qui ont une logique applicative complexe en extensions PHP écrites en C++ : très long à mettre en place et pas universel
- La solution qui sera retenue : transformer le code PHP en C++ via HipHop fo PHP
- HipHop : né en 2007 et utilisé en production sur 90% du code de FaceBook depuis 6 mois:
- pages web : 50% de consommation CPU en moisn a traffic équivalent (tests comprenant l’utilisation de memcache)
- API : 30% d’utilisation CPU en moins pour un traffic deux fois supérieur
- Transformation du code avec HipHop :
- effort sur les plus gros gains de performances que pouvait apporter l’utilisation de C++ :
- appels de fonctions statiques
- méthodes et propriétés statiques (OO)
- chargement des variables statiques
- g++ optimisation (function inline,…)
- Analyse statique : récupération de l’information « qui déclare quoi »
- correspondance des types : meilleur type C++ correspondant à une variable PHP
- code génération : pour la pluspart du code : correspondance directe entre les expressions PHP et C++ (if, else, for, while, etc etc)
- effort sur les plus gros gains de performances que pouvait apporter l’utilisation de C++ :
- le runtime est similaire à Zend Engine mais plus rapide
- Programmation avec HipHop :
- support des fonctionnalités « magiques » de PHP :
- appels dynamiques de fonctions (call_user_function(), …)
- supprot des propriétés et méthodes dynamiques
- variables dynamiques (avec extract() par exemple)
- includes() dynamiques
- utilisation de l’interprète HPHPi pour tester le code sans le compiler
- support des fonctionnalités « magiques » de PHP :
- En production : un processus multi-threadé, pas de downtime pendant les restarts, utilisable sur plusieurs serveurs
- Roadmap : compatibilité avec php 5.3 (actuellement il marche avec php 5.2), Apache comme une option de serveur web, évoluer en fonction de l’usage en dehors de facebook (open source)
- page du projet : http://developers.facebook.com/hiphop-php/
HipHop : bien ou mal?
J’ai un avis un peu partagé… Bien sûr que l’accroissement des performances sur une techno que j’utilise me plait bien
Mais on pourrait voir une nouvelle tendance équivalente à « j’ai des gros serveurs donc je peux coder nimp » qui se traduirait par « j’utilise HipHop qui va compiler mon code donc pas la peine de l’optimiser ». D’un autre coté HipHop ne s’occupe que du PHP. On devrait donc aller vers une meilleur séparation du code (MVC inside). Donc je pense que le fossé va encore un peu plus grandir entre les master en PHP et les pseudo développeurs qui après une semaine sont « développeur web junior ». D’où mon partage d’opinion…grosse avancé techno mais techno un peu plusdifficile d’accés qu’avant (pourmoi ca me gêne pas mais bon plus ya de monde plus on rit :p ). Et toi ? Qu’en penses tu?
Si le coeur t’en dit, voici la keynote :
User Responses
2 Responses and Counting...
Leave a Reply
[tuto jquery] drag ‘n drop avec sauvegarde automatique en base de données (2/2)
[tuto jquery] drag ‘n drop avec sauvegarde automatique en base de données (1/2)
[2 birthday] 2 ans aujourd'hui = 2 smashing book à gagner
[tuto web] cadre avec bordures extensibles valide xhtml/css
[tuto mashup] Google maps sur votre site : c'est possible! (version statique)
- Plastic Wrap Door Trick 10 mars 2010 nimaco05
- Dog Stache 9 mars 2010 Anand Gahlot
- Tree Railing 8 mars 2010 Yasmine Zalek
- Les clients français et le syndrome du verre à moitié vide 8 mars 2010 Julien
- Lever des fonds 5 mars 2010 Olivier Marone





![[3615 mylife] Limoges, c’est fini. La suite?](http://antoine.guiral.info/wp-content/uploads/2010/02/stvincent.jpg)
![[facebook] Du nouveau sur la roadmap](http://antoine.guiral.info/wp-content/uploads/2010/02/facebook_logo.png)
![[apple iPad] énorme succés de l’iPad à la dernière keynote d’apple](http://antoine.guiral.info/wp-content/uploads/2010/01/ipad.jpg)
![[google] google, le 51ème état?](http://antoine.guiral.info/wp-content/uploads/2010/01/51emeetat.jpg)
février 03, 2010
Bon rappel de comment marche hip hop PHP
je complèterais avec les limites concrètes pour les développeurs :
http://jpv.typepad.com/blog/2010/02/facebook-php-compiler-hiphop-php-les-limites.html
Apache et PHP5.3 ne sont pas supportés, et il y a certaines restrictions de language qui tournent autour d’eval(), mais qui du coup peuvent empecher certaines librairies de fonctionner
février 03, 2010
Hello, vi je viens juste de finir de lire ton billet et je n’ai pas parlé d’eval…les deux autres sont dans la roadmap :p
Et en effet le non support de apache (plus que de php5.3) est clairement problèmatique pour une diffusion grand public…