The Hack language : PHP avec un peu de typage statique

Posté par  . Édité par Davy Defaud, BAud, V, chicco, claudex, ZeroHeure, Fabrice Le Fessant, olivierweb et Bruno Michel. Modéré par claudex. Licence CC By‑SA.
Étiquettes :
42
23
mar.
2014
PHP

Facebook vient enfin d’annoncer son nouveau langage de programmation pour le Web, plus d’un an après les premiers déploiements en interne. Baptisé Hack et entièrement interopérable avec PHP, il s’exécute sur leur machine virtuelle maison (HHVM) et permet aux développeurs qui le souhaitent d’ajouter un peu de typage statique dans leur développement PHP. Il semble que pour Facebook, cette dose de typage supplémentaire était devenue indispensable à la maintenance sur le long terme de leur grande base de code.

D’un point de vue performance, la machine virtuelle HHVM utilise des techniques de compilation à la volée, alors que, précédemment, ils utilisaient pour le code en production un compilateur de PHP vers C++. Sur le code du site Facebook lui‐même, ils annoncent un gain de performance de ×10 en temps processeur. De manière plus générale, HHVM vise à terme une compatibilité complète avec PHP 5 — aujourd’hui, 98,5 % de compatibilité —, dans ce cas, ils annoncent un gain de ×2 par rapport à la version actuelle de Zend.

Au delà du gain en CPU dû à la machine virtuelle, cette annonce montre aussi que les questions de fiabilité et le typage statique commencent à faire leur chemin. La complexité croissante des applications Web en font une question centrale pour l’avenir. Même si Facebook a fait le choix conservateur de typer PHP plutôt que tout traduire vers un langage fortement typé (à cause de l’énorme masse de code déjà écrite), il est frappant de noter que le compilateur Hack lui‐même et le tutoriel en ligne sont implémentés en OCaml.

Dans son annonce officielle Facebook remercie d’ailleurs l’équipe Gallium de l’INRIA pour le compilateur OCaml, et le projet Ocsigen (CNRS, INRIA, Université Paris Diderot) pour le compilateur js_of_ocaml. La machine virtuelle HHVM est écrite en C++.