IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Facebook présente Hack, son langage de programmation dérivé de PHP
Qui apporte plusieurs nouveautés

Le , par Stéphane le calme

327PARTAGES

4  0 
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 ?

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de rawsrc
Expert éminent sénior https://www.developpez.com
Le 21/03/2014 à 13:55
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
3  0 
Avatar de herve4
Membre habitué https://www.developpez.com
Le 21/03/2014 à 15:01
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 ?

3  0 
Avatar de MagnusMoi
Membre éclairé https://www.developpez.com
Le 21/03/2014 à 14:09
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
2  0 
Avatar de Vlozer
Membre habitué https://www.developpez.com
Le 21/03/2014 à 14:27
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).
1  0 
Avatar de rawsrc
Expert éminent sénior https://www.developpez.com
Le 21/03/2014 à 14:50
Citation Envoyé par imikado  Voir le message
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 : Sélectionner tout
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;
1  0 
Avatar de miky55
Membre averti https://www.developpez.com
Le 21/03/2014 à 16:13
Citation Envoyé par MagnusMoi Voir le message
sponsorisé par un sous traitant de la NSA
Citation Envoyé par herve4 Voir le message

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!
1  0 
Avatar de imikado
Rédacteur https://www.developpez.com
Le 21/03/2014 à 14:18
Citation Envoyé par rawsrc  Voir le message
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 : Sélectionner tout
1
2
3
4
5
  
$i= new Int(1); 
$chaine= new String('totto'); 
  
print $i->toString().$chaine ;
0  0 
Avatar de Zefling
Expert confirmé https://www.developpez.com
Le 21/03/2014 à 14:49
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.
0  0 
Avatar de imikado
Rédacteur https://www.developpez.com
Le 21/03/2014 à 16:08
Citation Envoyé par rawsrc  Voir le message
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 : Sélectionner tout
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"
0  0 
Avatar de rawsrc
Expert éminent sénior https://www.developpez.com
Le 21/03/2014 à 16:22
Citation Envoyé par imikado Voir le message
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
0  0