Facebook propose Hack : un langage dérivé de PHP, plus sûr à l'exécution

Par:
fredericmazue

ven, 21/03/2014 - 12:06

Facebook vient d'annoncer officiellement Hack, un langage dérivé de PHP, destiné à s'exécuter avec HHVM et plus sûr à l'exécution.

Pour mémoire HHVM est le successeur du projet HipHop, une technologie devant convertir du code PHP en code C++. Un projet justifié par le problème récurrent de la consommation de ressources serveurs que pose PHP à Facebook. Facebook, ce serait, chiffre non officiel, 200 000 serveurs. Economiser des ressources, c'est diminuer le nombre de serveurs donc faire des économie substantielles au quotidien.

Finalement HipHop est devenu HHVM une machine virtuelle qui compile le code PHP (en maintenant le code Hack) en un code-byte intermédiaire avant que celui-ci soit traduit en code x64 par un compilateur Just-in-Time. Ce processus permet, selon Facebook, toutes sortes d'optimisations qui ne sont pas permises avec des binaires compilés statiquement.

Reste que PHP est un langage peu sûr à l'exécution. D'où l'idée du langage Hack, qui reprend grosso modo l'idée de TypeScript pour JavaScript.

En revanche là où TypeScript est 100% compatible avec JavaScript, Hack ne serait compatibles qu'à 9x% avec le code PHP existant.

La motivation première de Hack est la sûreté à l'exécution. Ainsi, par exemple, il doit éliminer l'erreur ultra-classique et souvent difficile à déboguer de l'appel d'une méthode d'un objet null.

Au moyen d'annotations, Hack permet d'ajouter le typage statique et donc la vérification de type lors de la compilation, sur les arguments de fonctions, les membres de classes et les valeurs de retour :

<?hh
class MyClass {
 const int MyConst = 0;
 private string $x = '';
 public function increment(int $x): int {
   $y = $x + 1;
   return $y;
 }
}

Hack apporte encore la programmation générique

<?hh
class Box<T> {
 protected T $data;
 
 public function __construct(T $data) {
   $this->data = $data;
 }
 
 public function getData(): T {
   return $this->data;
 }
}

Hack amène beaucoup d'autres choses :  les collections, les fonctions lambda, les synonymes de types, la programmation asynchrone, etc.

Hack est un langage open source