Facebook présente Hack, son langage de programmation dérivé de PHP
Qui apporte plusieurs nouveautés
Le 2014-03-21 12:58:20, par Stéphane le calme, Chroniqueur Actualités
Les ingénieurs Facebook présentent Hack, un nouveau langage de programmation pour HHVM, sa machine virtuelle de seconde génération open source conçue pour exécuter des projets écrits en PHP et en Hack. A titre de rappel, HHVM est le successeur du projet HipHop, une technologie devant convertir du code PHP en code C++.
Facebook indique avoir basculé quasiment l’ensemble de son code PHP sous Hack, l’une des raisons étant qu’il réduit la probabilité de commettre des erreurs simples qui sont un frein au processus de développement. Ci-dessous un exemple d’une erreur courante où une méthode pourrait être appelée de façon inattendue sur un objet nul, ce qui provoquerait une erreur qui ne serait pas prise en compte avant l’exécution.
« Traditionnellement, les langages typés dynamiques permettent un développement rapide mais sacrifient la capacité à chercher des erreurs tôt et à inspecter son code rapidement, en particulier sur de nombreuses lignes de code. Cependant, le typage statique fournit une plus grande sécurité mais parfois au prix de rapides itérations. Nous pensions qu’il devait y avoir un juste milieu. » C’est alors que Hack est né, et Facebook pense que son langage offre à la fois le meilleur des deux types quelle que soit la taille du projet.
Hack a été pensé comme un néo-PHP ; Facebook précise qu’il s’inspire fortement de ce langage. La transition d’un langage vers l’autre est donc censée être simple. D’ailleurs, « la plupart des fichiers valides en PHP le sont aussi en Hack ». « Notre principal ajout est le typage statique. Nous avons développé un système pour annoter les signatures de fonction et les membres de la classe en fonction des informations de type ; notre algorithme de vérification de type (le ‘type checker’) déduit le reste. La vérification de type est incrémentale, de telle sorte que dans le même fichier, une partie du code peut être convertie en Hack tandis que le reste demeure en PHP.». Cependant, Hack ajoute des fonctionnalités supplémentaires au-delà de la vérification du type statique parmi lesquelles Collections ou les expressions lambda.
L’objectif de ce projet est de diminuer la charge imposée aux serveurs en optimisant le code. Les développeurs intéressés sont d'ores et déjà invités à se saisir de ses outils de conversion, voire participer à l'amélioration du langage lui-même.
Installer Hack
Installer Hack Conversion
Source : Facebook
Et vous ?
Que pensez-vous de Hack ? Allez-vous l'essayer ?
Facebook indique avoir basculé quasiment l’ensemble de son code PHP sous Hack, l’une des raisons étant qu’il réduit la probabilité de commettre des erreurs simples qui sont un frein au processus de développement. Ci-dessous un exemple d’une erreur courante où une méthode pourrait être appelée de façon inattendue sur un objet nul, ce qui provoquerait une erreur qui ne serait pas prise en compte avant l’exécution.
« Traditionnellement, les langages typés dynamiques permettent un développement rapide mais sacrifient la capacité à chercher des erreurs tôt et à inspecter son code rapidement, en particulier sur de nombreuses lignes de code. Cependant, le typage statique fournit une plus grande sécurité mais parfois au prix de rapides itérations. Nous pensions qu’il devait y avoir un juste milieu. » C’est alors que Hack est né, et Facebook pense que son langage offre à la fois le meilleur des deux types quelle que soit la taille du projet.
Hack a été pensé comme un néo-PHP ; Facebook précise qu’il s’inspire fortement de ce langage. La transition d’un langage vers l’autre est donc censée être simple. D’ailleurs, « la plupart des fichiers valides en PHP le sont aussi en Hack ». « Notre principal ajout est le typage statique. Nous avons développé un système pour annoter les signatures de fonction et les membres de la classe en fonction des informations de type ; notre algorithme de vérification de type (le ‘type checker’) déduit le reste. La vérification de type est incrémentale, de telle sorte que dans le même fichier, une partie du code peut être convertie en Hack tandis que le reste demeure en PHP.». Cependant, Hack ajoute des fonctionnalités supplémentaires au-delà de la vérification du type statique parmi lesquelles Collections ou les expressions lambda.
L’objectif de ce projet est de diminuer la charge imposée aux serveurs en optimisant le code. Les développeurs intéressés sont d'ores et déjà invités à se saisir de ses outils de conversion, voire participer à l'amélioration du langage lui-même.
Source : Facebook
Et vous ?
-
rawsrcExpert éminent séniorJe suis assez dubitatif, mais bon pourquoi pas. Cela reste pour l'instant assez focalisé sur leur infra...
Si vous voulez du code typé en PHP, c'est tout à fait possible : il suffit pour cela de coder massivement en POO (pour les primitifs une petite couche d'auto-boxing) et le tour est joué.
Faites quand même attention à tout ce qui n'est pas supporté par Hack (et donc omis à la vérification) : icile 21/03/2014 à 13:55 -
herve4Membre habituénon mais sérieusement, c'est le 1er avril avant l'heure ou quoi ?
Appeler un nouveau langage de programmation web "hack", ça veut dire quoi ? qu'il est sponsorisé par la NSA ?le 21/03/2014 à 15:01 -
MagnusMoiMembre éclairéQue pensez-vous de Hack ? Allez-vous l'essayer ?
Plus sérieusement : au vu de la taille de la communauté PHP, de la grande fiabilité de ce langage et du fait qu'il ne soit pas sponsorisé par un sous traitant de la NSA : POURQUOI LE TESTERAI-JE ?
Donc je n'en pense pas grand chose, et ne l'essayerai pas.
Quelque part, c'est un peu comme dart : je ne nie pas le travail effectué ... mais pourquoi passer par des solutions dérivées, quand l'original est un "Standard" ?
Bonne vendredi et relâchez vous les yeuxle 21/03/2014 à 14:09 -
VlozerMembre habituéJe trouve ça plutot cool que Facebook essaye de soigner son image en s'impliquant dans l'évolution de l'IT (en faisant autre chose qu'internet.org)... toutefois on peut pas dire que l'annonce de ce nouveau langage ait fait mouche pour l'instant...
Perso en tout cas, ca me donne pas envie... Deja parce que j'aime pas le PHP de base, mais surtout parce que ça fait quand meme gros rafistolage...
Autant je peux comprendre que ça puisse etre utile pour la reprise de quelques gros projets vieillissants à fort trafic... autant ça me générai de construire quelque chose de nouveau avec ça (je préfère alors directement passer par un langage que j'aime et qui a été pensé pour être performant dès le début).le 21/03/2014 à 14:27 -
rawsrcExpert éminent séniorBen l'erreur tu peux difficilement l'éviter à moins de s'assurer explicitement que ce qui tu manipules est du type attendu.
D'ailleurs leur algo, ne t'évite pas l'erreur, il te signale un problème potentiel (si tu codes à la va vite sans filet de sécurité). C'est de l'analyse statique de code comme il est fait en Java, C#...
Pour le reste c'est proche oui.
En utilisant la méthode magique __toString(), il est même possible de s'affranchir du ->toString().
Quelque chose comme ça :
Code php : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27class Int { protected $v; public function __construct($p) { if (is_int($v)) { $this->v = (int)$v; } else { throw new InvalidArgumentException('Integer expected'); } } public function __toString() { return $this->v; } } // dans le même genre pour les autres types primitifs : $i = new Int(1); $chaine = new String('totto'); echo $i, $chaine;
le 21/03/2014 à 14:50 -
miky55Membre avertiC'est vrai que le non est un peu tout pourri... Mais faut arrêter la parano une minute, ils l'ont nommé hack parce-que c'est un hack de php et pas un framework au dessus de php. Ça reste open source à 100% et dirigé par la communauté... donc la NSA, la NSA, elle a bon dos!le 21/03/2014 à 16:13
-
imikadoRédacteurPas bien compris..
COmment eviter l'erreur cité au dessus par exemple où on utilise une méthode d'un objet qui peut potentiellement être null ?
Votre idée de faire du massivement Poo reviendrait à ceci ?
Code php : 1
2
3
4
5$i= new Int(1); $chaine= new String('totto'); print $i->toString().$chaine ;
le 21/03/2014 à 14:18 -
ZeflingExpert confirméQue pensez-vous de Hack ? Allez-vous l'essayer ?
Pour l'instant, j'attends plus les évolutions prévu dans PHP 5.6 que Hack.le 21/03/2014 à 14:49 -
imikadoRédacteurJ'ai bien compris pour les types mais pour l'histoire de la methode qui alerte parce que l'objet est potentiellement vide donc on pourrait avoir "erreur : call to method of undefinied object"le 21/03/2014 à 16:08
-
rawsrcExpert éminent séniorPour arriver à ça, il faudrait encapsuler tous les appels dans un genre de sandbox (ingérable à mon avis en php) et encorele 21/03/2014 à 16:22