Industrialisation PHP

3fév/102

HipHop : Une révolution pour PHP ?

La rumeur courait depuis que dimanche un employé avait laissé entendre dans une interview que Facebook travaillait sur un projet secret visant à améliorer radicalement les performances de PHP. L'annonce officielle a été faite hier par l'équipe qui travaille sur ce projet dont le nom est HipHop for PHP.

Ce projet fait suite à toute une série d'améliorations initiées ou supportées par Facebook pour améliorer les performances de PHP comme les patchs proposés pour l'extension APC.

Un fonctionnement novateur

Avant de voir comment fonctionne HipHop, faisons un rappel sur le fonctionnement de PHP. Il s'agit d'un langage de script et non un langage interprété comme Java ou compilé comme C ou C++. Cela signifie qu'à chaque exécution PHP doit analyser lexicalement puis syntaxicalement le script appelé, le transformer en OP Code, un format binaire, puis exécuter cet OP Code. La phase d'analyse du script et de création de l'OP Code peut être optimisée à l'aide d'un cache d'OP Code comme APC.

HipHop a choisi une approche radicalement différente qui consiste à transformer le script PHP en code source C++ qui sera ensuite compilé avec les outils standards de ce langage.

Schéma de transformation de HipHop for PHP

La transformation se fait en trois étapes :

  • Analyse statique afin de déterminer qui déclare quoi et les dépendances afférentes ;
  • Détermination du type C++ le plus adapté, si la variable change de type au cours de sa vie un type "variant" proche des zval du Zend Engine sera utilisé ;
  • Transformation des structures PHP en code C++.

La substitution de HipHop au binaire PHP officiel vise à être transparente pour les développeurs mais bien entendu, tout cela n'est pas miraculeux et quelques contraintes existent.

Les limites

Tout d'abord, Windows n'est pas supporté et ne le sera probablement pas dans un avenir proche. Cela n'est pas un problème majeur car les serveurs de production des utilisateurs potentiels sont quasiment tous sous Unix mais cela pourrait compliquer son adoption car la majorité des postes de développement restent sous Windows.

Plus impactant, une fois compilé HipHop utilise son propre serveur web, ou son interface ligne de commande. Il est cependant possible de le coupler à Apache ou tout autre outil via un reverse proxy.

Par ailleurs, comme tout "émulation" d'un langage, HipHop ne peut être 100% compatible avec la dernière version de PHP. Il implémente aujourd'hui l'essentiel des fonctionnalités de PHP 5.2 ainsi que des extensions principales. Il faut noter que pour des raisons techniques évidentes certaines fonctions ne peuvent être supportées comme eval(), qui exécute dynamiquement du code PHP passé en argument.

L'absence d'eval() n'est pas très grave car il n'y a pratiquement aucune bonne raison d'utiliser cette fonction. En revanche, cela veut probablement dire que les assertions, qui évaluent du code à la volée pour vérifier le comportement de l'application, ne seront pas utilisables ce qui est dommage.

Quel public pour HipHop ?

Disons le clairement, en l'état actuel, HipHop n'est pas pour tout le monde. Le mode d'exécution classique de PHP a de beaux jours devant lui, notamment pour les hébergements mutualisés. La cible de HipHop est donc principalement les sites à fort et très fort trafic, à l'image de Facebook.

HipHop pourrait également être utile pour les scripts lancés en ligne de commande pour effectuer des opérations longues et récurrentes comme des imports. Ces opérations sont souvent lentes et consommatrices de CPU et de mémoire.

Révolution ou simple expérimentation ?

Il est un peu tôt pour se prononcer mais HipHop s'inscrit dans la tendance actuelle où l'on voit de plus en plus nettement se creuser un fossé entre les besoins simples des petites applications peu sollicitées, que l'on pourrait qualifier d'approche historique, et ceux beaucoup plus exigeants des applications critiques développées par des acteurs économiques de premier plan.

Le risque qu'engendre cette divergence des besoins et des moyens est une scission de la communauté PHP qui constitue l'une de ses forces. Pour le moment nous n'en sommes heureusement pas là et je doute que ce soit le but de Facebook qui une fois de plus réaffirme clairement son attachement à PHP pour sa simplicité et sa flexibilité.

Enfin, l'absence de support pour PHP 5.3 aura-t-elle un impact négatif sur l'adoption de ce dernier chez les grands comptes ?

20jan/102

PHPTV parle d’industrialisation de PHP

Damien a été interviewé par PHPTV sur le thème de l'industrialisation de PHP. Ce fut l'occasion de rappeler les éléments de base à mettre en place pour commencer à industrialiser ses développements PHP.

http://www.dailymotion.com/videoxbwt9q
6jan/104

Bientôt un plugin PHP pour Sonar

Sonar est un outil Open Source de gestion de la qualité du code. Il analyse le code d'un projet pour fournir de nombreux tableaux de bord qui permettent d'en évaluer la qualité. Pour cela, il utilise différents angles :

  • Architecture et conception ;
  • Duplications ;
  • Test unitaires ;
  • Complexité ;
  • Bogues potentiels ;
  • Règles de codage ;
  • Commentaires.

Il possède également un puissant mécanisme d'extensions qui permet de supporter de nouveau langages, d'ajouter des métriques et des règles d'analyse ou encore de s'intégrer au sein d'un processus d'Intégration Continue.

Jusqu'à présent Sonar était très orienté Java et il était impossible d'analyser un projet PHP. Ce temps est en passe d'être révolu grâce à l'arrivée prochaine d'une extension qui permettra d'intégrer les outils liés à l'analyse de la qualité du code qui sont portés depuis le monde Java (PHPUnit, PHP_CodeSniffer, PHP_Depend, etc.)

Tableau de bord de SonarCette extension est encore à l'état de prototype mais son potentiel est énorme.

16nov/090

Qu’est-ce qu’industrialiser les développements PHP ?

L'industrialisation des développements PHP est un thème émergent. Depuis quelques mois, on en entend de plus en plus parlé mais qu'est-ce que cela recouvre concrètement ?

Une définition pourrait être que l’industrialisation des développements consiste à mettre en œuvre des pratiques et des outils visant à rendre les logiciels produits plus robustes, tout en restant dans des délais et des coûts maîtrisés. On a donc là deux leviers : des pratiques et des outils qui permettent d'atteindre deux buts précis : obtenir des logiciels robustes en maîtrisant à la fois le budget et le planning.

Ces pratiques et ces outils sont multiples et varient selon les habitudes, les sociétés et les projets. Nous avons tenté d'en lister un certain nombre qui nous paraissent essentiels :

  • Former les équipes ;
  • Employer une convention de programmation ;
  • Utiliser un dépôt de code ;
  • Utiliser un framework ;
  • Adopter un IDE de développement ;
  • Automatiser les tests ;
  • Mettre en place une intégration continue ;
  • Déployer automatiquement ;
  • Pratiquer l'analyse statique ;
  • Utiliser des outils de conception ;
  • Mettre en place des méthodes de programmation ;
  • Maîtriser de la qualité du code ;
  • S'assurer de l'implication des utilisateurs.

Et vous, quelles pratiques et outils utilisez-vous pour industrialiser vos développements ?