Hack, le « nouveau PHP » de Facebook

Anthony Nelzin-Santos |

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.

avatar Frodor | 

À 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 | 

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 | 

@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 | 

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 | 

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

avatar Ali Baba | 

@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 | 

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

avatar fornorst | 

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 | 

"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 | 

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

avatar b_eddy | 

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 | 

"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 | 

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 | 

@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 | 

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

avatar popey | 

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 | 

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

avatar jackhal | 

"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 | 

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 | 

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 | 

@aimstar

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

avatar methos1435 | 

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

avatar marc_os | 

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 | 

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 | 

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

avatar Un Vrai Type | 

@Aquarius87 :
En fait, l'avenir de PHP est obscure.
Abandon de la version 6 ( même si les versions 5.4 et suivantes ont apportés leur lot d'innovation).
C'est l'abandon de l'uniformisation des noms de fonctions ( parce que c'est un sacré bordel)

La question du typage, c'est un problème. Mais ce n'est pas ça qui va renverser la vapeur.
Alors pourquoi pas un remplaçant venant d'ailleurs ?

avatar MarcoAix | 

ÇA... c'est un langage, nom di diou !
http://www.vingthuitzerotrois.fr/logiciel/steven-wolfram-presente-son-propre-language-informatique-15720/
On se dit que ça devrait être comme ça depuis le début ;-)

avatar dmorel | 

Corriger les défauts de PHP, à part tout refaire, je vois pas. Rien que les conventions de nommage, ah oui, eh ben non, il n'y en a pas. Ca facilite pas la vie. Mais c'est juste un aspect; chez les anglophones, il y a une blague classique qui est de dire que le PHP, c'est les petites roues sans le vélo.
Les autres langages de scripts (ce qui ne veut pas dire grand-chose, notez, python, ruby ou perl sont des langages de programmation, mais on me ressortira l'histoire du scripting, je pare) sortis avant ou peu après sont bien plus évolués, cohérents, puissants, etc.
La dernière fois que j'ai jeté un oeil au code source de PHP (sur 5.3 si je me souviens bien) pour comprendre une divergence entre la doc et le comportement de l'interpréteur, les bras me sont tombés de la méconnaissance manifeste des auteurs quant à certains aspects pas si bas niveau du système censé faire tourner le langage. Sans parler des bêtises de débutant en C.
Bref, il est sans doute possible de réécrire la tuyauterie en entier, ce que j'imagine ont fait les devs chez Facebook (parce que eux savent ce qu'ils font), mais la spec/la grammaire du langage lui-même est à dégager purement et simplement. Vous avez fait du PHP et puis d'autres choses? Alors vous voyez ce que je veux dire.
Après, ce n'est qu'un outil, et on peut programmer aussi efficacement (du point de vue du résultat final) en PHP qu'en n'importe quoi d'autre. Mais c'est plus agréable, plus rapide, plus facile, plus efficace (au choix, mix and match) dans pas mal d'autres langages.
En fait, je ne comprends pas bien pourquoi FB a sorti ça. Pour assurer la compatibilité arrière? J'avais pourtant l'impression que seule une toute petite partie du front-end était écrite en PHP de nos jours, rien d'insurmontable pour passer à autre chose. Bizarre.
Note: j'ai commencé la programmation professionnellement en PHP, mais je suis passé à d'autres choses depuis :-)

avatar jackhal | 

"Mais c'est juste un aspect; chez les anglophones, il y a une blague classique qui est de dire que le PHP, c'est les petites roues sans le vélo."
on ne doit vraiment pas consulter les mêmes sites. ceux que je visite regardent le bon coté des choses et ce qui existe : Facebook, Wikipedia, Wordpress, Drupal, Magento... Bref, du pragmatisme et un esprit positif typique des sites anglo-saxon (et au-delà bien sûr puisque généralement ces sites attirent les développeurs du monde entier).
le dénigrement, la moquerie d'emblée, l'idée de hiérarchie indiscutable, c'est un truc bien ancré en France... qui bien existe partout à diverses intensités mais c'est vraiment étrange de s'appuyer sur les "anglophones" pour se moquer de PHP : c'est vraiment pas l'esprit général que je connais.

et non, il n'y a pas qu'une petite partie de FB écrite en PHP. c'est quasiment tout qui est en PHP notamment parce que c'est un langage qui permet des développements rapides et qu'il est facile de recruter des développeurs connaissant ce langage. FB a déjà expliqué sa vision sur ce point, ça se trouve sans problème si on cherche un peu. Encore une fois c'est du pur pragmatisme.

pour moi il n'y a pas de langage meilleur qu'un autre de manière définitive, tout dépend du contexte, de l'existant...
j'avais une excellente transcription de conférence de nombreux créateurs de langages en version papier, je l'ai jetée c'est bien dommage. ce qu'il en sortait c'était que du positif : ce dont je suis un peu jaloux dans ce que tu as créé et que je ne peux pas faire dans mon langage c'est blablabla... les avantages/désavantages du typage fort ou faible... tous avaient l'air de tout aimer au final, sans être mielleux.

personne n'a parlé de petites roues sans vélo, étrangement.

CONNEXION UTILISATEUR