Developpez.com

Le Club des Développeurs et IT Pro

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 ?
  Discussion forum
18 commentaires
  • rawsrc
    Expert éminent sénior
    Je 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) : ici
  • herve4
    Membre 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 ?

  • MagnusMoi
    Membre éclairé
    Que pensez-vous de Hack ? Allez-vous l'essayer ?
    C'est vendredi jour de troll

    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 yeux
  • Vlozer
    Membre 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).
  • rawsrc
    Expert éminent sénior
    Envoyé par imikado 
    Pas 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 ?

    Ben 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
    27
    class 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;
  • miky55
    Membre averti
    Envoyé par MagnusMoi
    sponsorisé par un sous traitant de la NSA
    Envoyé par herve4

    Appeler un nouveau langage de programmation web "hack", ça veut dire quoi ? qu'il est sponsorisé par la NSA ?
    C'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!
  • imikado
    Rédacteur
    Envoyé par rawsrc 
    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é.

    Pas 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 ;
  • Zefling
    Expert confirmé
    Que pensez-vous de Hack ? Allez-vous l'essayer ?
    En l'état, j'en pense pas grand-chose. Pour quelque amélioration dans la compatibilité ne va que dans un sens, ça ne m'intéresse pas pas trop. Passer à Hack veut dire qu'un retour à PHP sera compliqué, et rien ne dit que Hack va fonctionner au delà de Facebook.

    Pour l'instant, j'attends plus les évolutions prévu dans PHP 5.6 que Hack.
  • imikado
    Rédacteur
    Envoyé par rawsrc 
    Ben 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
    27
    class 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;

    J'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"
  • rawsrc
    Expert éminent sénior
    Envoyé par imikado
    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"
    Pour arriver à ça, il faudrait encapsuler tous les appels dans un genre de sandbox (ingérable à mon avis en php) et encore