Fermer le menu

Hack, le « nouveau PHP » de Facebook

Anthony Nelzin | | 12:15 |  29

Créé par et pour Facebook, Hack est un nouveau langage de programmation censé palier les défauts de PHP. En développement depuis quelques années, il est d’ores et déjà utilisé par la société de Mark Zuckerberg, qui l’a rendu open source..

Hack est très proche du PHP, si proche que la plupart des fichiers PHP sont des fichiers Hack valides. Ce n’est pas un hasard : Facebook a été construit en PHP. La transition d’un langage vers l’autre est donc censée être simple — elle peut du moins être assistée par des outils créés par les ingénieurs de Facebook. Pourquoi, alors, créer un nouveau langage ?

PHP est un langage de programmation à typage dynamique : le développeur n’a pas besoin de déclarer explicitement le type des variables qu’il utilise, ce qui est simple mais peut amener des erreurs. Il s’oppose aux langages de programmation à typage statique, où il faut au contraire déclarer le type des variables, ce qui permet au compilateur de détecter d’éventuelles erreurs avant même que le programme ne soit exécuté.

À l’échelle de Facebook, les langages à typage dynamique offrent trop peu de structure pour des projets très complexes, et sont trop coûteux en ressources puisque le typage est réalisé à la volée lors de l’exécution. Mais malgré leurs avantages indéniables, les langages à typage statique peuvent être trop formels. La solution ? Bryan O’Sullivan, qui a beaucoup travaillé sur Haskell avant de développer Hack, l’a trouvé dans une troisième voie, celle des langages à typage « progressif » où le typage dynamique peut cohabiter avec le typage statique.

Hack remplacera-t-il, à terme, PHP ? Il est bien difficile de le prédire, mais il faut remarquer qu’il ne manque pas d’élégance et répond à une grande partie des critiques à l’encontre de PHP. Il est en tout cas d’ores et déjà utilisé par Facebook, qui invite les développeurs à se saisir de ses outils de conversion, voire à améliorer le langage lui-même.

Catégorie : 

29 Commentaires

avatar Frodor 21/03/2014 - 12:25via iGeneration pour iPhone

À vrai dire, je me suis toujours demandé comment on pouvait inventer un langage informatique. C'est comme ci quelqu'un créait une nouvelle langue en somme, avec toutes la syntaxe, règle orthographique, etc ?!

avatar oomu 21/03/2014 - 14:40

ben oui.

et ce n'est pas si complexe.

tout d'abord, y a à peu près 150 ans de développement des mathématiques formelles (avec Ada Byron et Blaise Pascal), on sait un peu ce qu'il faut faire depuis.

ensuite avec les premiers ordinateurs ont été vu, revus, et RABACHES, les problématiques que les langages doivent résoudre.
On a ensuite la somme de l'expérience sur l'ensemble des paradigmes et concepts mises en oeuvre par des centaines (milliers) de langages sur des centaines d'architectures différentes. que cela soit les langages procéduraux, fonctionnels, objets, scripts, récursif, et j'en passe.

De plus, on se base sur l'existant, un langage actuel ne va pas naître d'une feuille blanche sous un arbre mais à partir de compilateurs existants, de compilateur de recherche académiques et autres pré-langage qui peuvent servir de début avant d'être réécrit à leur tour quand le langage est bien structuré et qu'il est temps d'améliorer ses performances.

etc.

avatar nayals 21/03/2014 - 12:43

@Frodor :
Un peu, oui. Sauf que comme beaucoup de langues sont dérivées du latin, beaucoup de langages de programmation sont des dérivés d'un même langage (PHP, Hack, Objective-C, C++, C# sont tous des dérivés du C par exemple). Donc en gros, on ne réinvente pas la poudre à chaque fois. On l'améliore ou on l'adapte à un usage spécifique.

Ici par exemple, Hack change juste quelques règles de programmation de PHP. La syntaxe est quasi-identique.

avatar xavier25 21/03/2014 - 12:38via iGeneration pour iPhone

Un langage c'est juste un ensemble de classes dans lesquels on va piocher des fonctions qui répondent à une certaine syntaxe.

avatar Ali Baba 21/03/2014 - 12:53via iGeneration pour iPhone

@xavier25 :
Non, ça c'est une API.

avatar Ali Baba 21/03/2014 - 12:58via iGeneration pour iPhone

@Ali Baba :
Même si parfois les deux sont imbriqués (PHP en est un très bon exemple, et dans une moindre mesure Objective-C et Java en sont un autre exemple), ils sont malgré tout conceptuellement distincts. Et on a pu, par le passé, connaître par exemple du Cocoa (une API) exprimé en Java (un langage).

Encore aujourd'hui, de nombreux ponts sont construits entre Cocoa et d'autres langages (par exemple Mono, qui permet d'appeler l'API Cocoa en C#).

avatar Rez2a 21/03/2014 - 14:33via iGeneration pour iPhone

@Ali Baba :
Non c'est un framework ;)

avatar fornorst 21/03/2014 - 12:40via iGeneration pour iPhone

Oui c'est à peu près ça mais ça n'est pas si difficile que ça en fait. Ce qui l'est est de bien définir les besoins auxquels on veut que ce langage réponde.

À noter par rapport à la news que Jack est en fait un dérivé de HipHop, la VM développée par Facebook pour remplacer l'exécute le PHP. Cette nouvelle VM est déjà capable de faire tourner la majorite des framework open Source du marche avec des haine de performance assez hallucinants !

avatar Ali Baba 21/03/2014 - 12:53via iGeneration pour iPhone

"Bryan O’Sullivan, qui a beaucoup travaillé sur Haskell avant de développer Hack, l’a trouvé dans une troisième voie, celle des langages à typage « progressif » où le typage dynamique peut cohabiter avec le typage statique"

Comme l'Objective-C, en fait.

avatar oomu 21/03/2014 - 14:41

oui. Après l'exacte fonctionnement technique en dessous, c'est pas la question.

avatar b_eddy 21/03/2014 - 13:13via iGeneration pour iPhone

C'est une très bonne initiative. PHP est un langage fort sympathique mais ne possède pas les épaules assez larges pour de gros projets complexes. Un fort typepage est une très bonne chose et garder une syntaxe identique aussi. Hack semble prometteur pour le développement web. Une belle évolution de php je vois.

avatar oomu 21/03/2014 - 14:57

"Hack remplacera-t-il, à terme, PHP ? Il est bien difficile de le prédire, mais il faut remarquer qu’il ne manque pas d’élégance et répond à une grande partie des critiques à l’encontre de PHP"

pas avant un moment en tout cas.

Faut voir l'intégration à Apache et dans un workflow de production

QUID de Zend ?

Facebook avait déjà fait Hiphop pour améliorer php ? je vois que hiphop est une dépendance de Hack, ça marche avec leur développement pour une VM php ?

etc etc . Bref : la production, le retour, le support etc, sont des questions à répondre avant d'imaginer un "remplacement de php" (qui est impossible vu que php est une dépendance (entre autre) de hack )

-
le principal écueil de PHP (et donc Hack), c'est de manquer d'un Framework complet à l'instar de Java Enterprise ou Cocoa (je sais cocoa n'est pas là pour faire du client-serveur).

avatar hurlebouc 21/03/2014 - 15:46

Bonjour,

Attention à ne pas confondre typage dynamique/statique et typage implicite/explicite : l'article parle de typage dynamique comme étant la possibilité de ne pas spécifier les types lors de l'écriture du programme. Ce n'est pas ça : un typage dynamique signifie que le type des objets n'est défini que lors de l'exécution, alors qu'avec typage statique, le type de chaque objet est vérifié avant même l'exécution du programme, ce qui peut permettre de vérifier certain types d'erreurs avant d'exécuter le programme.

Le fait de ne pas écrire les types directement dans le code du programme signifie que le langage est à typage implicite, ce qui ne signifie pas forcément que le typage est dynamique : le compilateur (ou plus simplement le programme qui va regarder le programme avant l'exécution, s'il existe...) peut dans certains langages inférer le type des objets en analysant le code, et cela sans exécuter le programme.

avatar jodido 21/03/2014 - 15:56via iGeneration pour iPad

@hurlebouc

Certains langages prennent même en charge les trois formes de typage : statique, dynamique et par inférence. C# avec .net par exemple.

avatar l3aronsansgland 21/03/2014 - 15:52via iGeneration pour iPhone

Je confirme que le dynamic binding n'est effectué qu'au runtime (ex : Java)

avatar popey 21/03/2014 - 17:07

En fait, php n'est pas typé dynamiquement : il est extrêmement faiblement typé.
Ca qui permet per exemple des aberrations telles que des additions entre des entiers et des chaines de caractères.
5+"10" est valide en PHP.
et echo 09; vous affichera ..... 0, tout comme echo 08;

C'est une incroyable faiblesse du langage. Inacceptable de mon point de vu en 2014 (tout autant que en 2010 ou avant). Ca permet de faciliter énormément le développement de fonctionnalités comme les injections SQL, pour prendre un exemple classique.

Personnellement, avec un peu de recul, le choix a été plutôt simple : les mauvais outils sont à fuir. Au lieu d'attendre que la roue soit réinventée autour de php, j'utilise des langages matures et rigoureux qui intègrent ces "nouveautés" depuis de très nombreuses années, et je préconise à toutes les personnes que je conseil d'en faire autant.

avatar marc_os 21/03/2014 - 17:25

C'est quoi tes langages "matures et rigoureux" ?
asp, dot net ?
:D

avatar jackhal 22/03/2014 - 02:47

"Ca permet de faciliter énormément le développement de fonctionnalités comme les injections SQL, pour prendre un exemple classique."
euuuuh... hein ?
non c'est pas classique du tout, quelqu'un qui écrit n'importe quoi peut s'attendre à n'importe quoi, avec n'importe quel langage.

avatar popey.marin 24/03/2014 - 12:24

Imaginons que je veuille proposer un service pour charger un élément en fonction d'un ID numérique.
Le fait de typer l'ID comme étant un entier provoquera une erreur si on envoi une chaine de caractère SQL. Donc, pas d'injection possible.
Je suis d'accord, si on écrit n'importe quoi, on obtient n'importe quoi.
Mais un language qui permet de faire n'importe quoi, y compris des choses incohérent n'est pas un bon outil. Et un mauvais outil n'aide jamais à obtenir un bon résultat.

Quand je parle de language mature, il y en a plusieurs, mais parmi ceux que je connais, il y a Java, et j'espère bientôt y ajouter Scala, qui me semble apporter des concepts très interessants.
Plus quelques autres, mais moins orientés web.

avatar aimstar 21/03/2014 - 16:39via iGeneration pour iPhone

Mdr cest lexcuse de facebook pour avoir un site super mal codé qui bug tout le temps et qui est super moche ? Le pho enfaite c nul mdrr la vieille excuse m.zukerbite

avatar methos1435 21/03/2014 - 17:05via iGeneration pour iPad

@aimstar

En quoi le design d'un site ou d'une application est à mettre en relation avec le langage utilisé ??

avatar methos1435 21/03/2014 - 17:06via iGeneration pour iPad

Essayes déja de maintenir une infrastructure aussi grande que celle de facebook et tu pourras critiquer...

avatar marc_os 21/03/2014 - 17:22

Comme si les "type hints" n'existaient pas déjà en php…
Et pourquoi diable avoir inventé une nouvelle syntaxe pour déclarer les types plutôt que de reprendre les règles du C, comme c'est d'ailleurs déjà le cas pour le type hinting de php ?

avatar Aquarius87 21/03/2014 - 17:49

C'est le monde fantastique de la programmation on invente pour inventer ? si à l'époque le C , Java apportaient un réel plus aujourd'hui je trouve bête d'inventer un nouveau langage juste car le PHP ne gère pas la déclaration de type et que tout se fait dynamiquement.

Plutôt que corriger le PHP sur ce point il faut inventer un autre langage par ailleurs même si en PHP ce manque de type faiblement typé est source de problème faut savoir programmer et connaître les faiblesses et les forcent quand on emploi un langage , je ne programmerai pas en PHP comme je programme en C#...

Ensuite je pense quand même que si PHP ne convient pas faut se tourner vers un autre langage Python , JavaEE qui sont prévus pour se genre de projet plus complexe.

avatar Un Vrai Type 21/03/2014 - 18:10via iGeneration pour iOS

@popey :
Tu n'utilises qu'Effeil donc ? :)

Pages

Connexion utilisateur