URL: https://linuxfr.org/news/the-hack-language-php-avec-un-peu-de-typage-statique Title: The Hack language : PHP avec un peu de typage statique Authors: foreground Davy Defaud, BAud, V, chicco, claudex, Fabrice Le Fessant, ZeroHeure, olivierweb et Bruno Michel Date: 2014年03月21日T11:55:00+01:00 License: CC By-SA Tags: php Score: 42 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](http://fr.wikipedia.org/wiki/HipHop_for_PHP)) 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_](https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e), 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++. ---- [L’annonce](https://code.facebook.com/posts/264544830379293/hack-a-new-programming-language-for-hhvm/) [Le site officiel du langage](http://hacklang.org/) [Le site officiel de HHVM](http://hhvm.com/) [Un tutoriel interactif : de PHP à Hack](http://hacklang.org/tutorial) [Différents portails sur OCaml](http://ocaml-lang.org) [Le projet Ocsigen](http://ocsigen.org/) ---- ## Un peu, ou beaucoup, de typage statique ## Ahhh, le typage statique ! Une ceinture de sécurité indispensable pour les uns, une plaie bridant l’imagination pour les autres. Un peu un combat entre une vieille Europe rationnelle et un nouveau monde plus dynamique. Hack propose une alliance originale entre deux modes de développement trop souvent présentés comme incompatibles. Avec Hack, on préserve l’aspect réactif du développement avec PHP : il suffit d’éditer le fichier source et de rafraîchir son navigateur. Pas de phase de compilation, pas d’erreur de type interdisant l’exécution du programme. Le typeur est à côté, il nous apporte des garanties supplémentaires si on le souhaite et il se fait discret sur les fragments de code que l’on ne veux pas typer. Avec cette approche, on peut écrire le prototype sans se soucier du typage statique, puis progressivement ajouter des annotations de types et découvrir des erreurs de programmation que les tests n’avaient pas encore permis de découvrir. Et, une fois le programme entièrement typé, que gagne‐t‐on ? À titre personnel, je dirais une certaine sérénité d’esprit et une dose de confiance supplémentaire en son code. Mais, plus concrètement, on peut dire : une meilleure compréhension de l’architecture du code, grâce à l’effort de spécification des types des fonctions et méthodes ; et, quand le nombre de lignes de code augmentera, la garantie que les modifications ne viendront pas trop facilement casser le code existant. Par exemple, changez le type d’une fonction, le typeur vous trouvera immédiatement — car celui de Hack est diablement rapide — toutes les lignes de code à adapter en conséquence. Le tutoriel interactif, en lien dans la dépêche, contient une introduction au système de types de Hack. Reste à voir, si le système de types choisi sera aussi utilisable avec les styles de programmation différents de ceux utilisés en interne chez Facebook. ## Quelques autres nouveautés ## En plus d’un mécanisme de transition en douceur vers le monde merveilleux des types statiques, Hack ajoute à PHP deux ou trois petits choses utiles, par exemple (les extraits de code proviennent du tutoriel) : * de nouvelles classes pour [les collections](http://docs.hhvm.com/manual/en/hack.collections.interfaces.php) : `Set`, `Vector`, etc. Elles sont génériques pour le typage, leur type est paramétré par le type des éléments qu’elles contiennent ; * une syntaxe légère pour les _lambda_, ce qui est particulièrement pratique pour utiliser les méthodes `map` ou `filter` des collections susnommées. ```php function vector_add1(Vector $v): Vector { // Construit un nouveau vecteur en ajoutant 1 à chaque élément du vecteur $v return $v->map($x ==> $x + 1); } ``` * de nouvelles primitives pour faciliter la programmation asynchrone : [`async` et `await`](http://docs.hhvm.com/manual/en/hack.async.php) ; * [l’extension XHP](https://www.facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919) d’écriture de squelettes HTML, avec protection contre les [XSS](https://fr.wikipedia.org/wiki/Cross-site_scripting), est disponible par défaut : ```php function build_paragraph(string $text, string $style): :div { return

{$text}

; } ``` * une syntaxe plus concise pour initialiser les champs d’un objet : ```php /* En PHP */ class PHPPoint { private float $x; private float $y; public function __construct(float $x, float $y) { $this->x = $x; $this->y = $y; } } /* En Hack */ class HackPoint { public function __construct( private float $x, private float $y ) {} } ``` ## En prime : du multicœur pour OCaml ? ## Pour ne pas freiner l’adoption du typage statique dans une communauté qui n’y est pas nécessairement habituée, il faut que le typeur soit rapide, voire très rapide, y compris sur un code de la taille de celui du fameux réseau social. Et pour ça, point de secret, la programmation multicœur peut aider ! Et en fouillant dans le code de Hack — disponible avec une licence BSD sur GitHub — on découvre une bibliothèque OCaml de _tas partagé_ entre plusieurs processus. Techniquement parlant, le typeur de Hack est un serveur qui tourne en tâche de fond et surveille les dossiers sources, notamment en utilisant `inotify` sur GNU/Linux. Ce serveur sert uniquement de point d’entrée, il délègue ensuite les vérifications de type et autres mécanismes d’inférence à des processus fils, créés à la demande. L’état global du typeur est maintenu collaborativement par tous les fils dans un tas partagé. Cette architecture collaborative évite aux processus fils de devoir communiquer leurs résultats au serveur maître et évite donc d’y introduire un goulet d’étranglement. Ce joli exemple pourrait permettre de faciliter grandement la programmation multicœur en OCaml. Espérons que la bibliothèque de Hack sera rapidement proposée à la communauté OCaml, par l’intermédiaire d’un paquet pour [`opam`](http://opam.ocamlpro.com), le gestionnaire de paquets édité par OCamlPro.

AltStyle によって変換されたページ (->オリジナル) /