Hack (langage)

Page d’aide sur l’homonymie

Pour les articles homonymes, voir Hack (homonymie).

Hack
Logo.

Date de première version 2014
Paradigmes Impératif, objet, fonctionnel, procédural, réflexif.
Langage interprété
Auteur Facebook
Développeurs Facebook
Dernière version 4.172 ()Voir et modifier les données sur Wikidata
Typage Statique, Fort
Influencé par PHP
Écrit en OCamlVoir et modifier les données sur Wikidata
Système d'exploitation Multiplate-forme
Licence Licence BSD
Site web hacklang.org

Hack est un langage de programmation impératif créé par Facebook et proche du langage PHP dont il se distingue par un typage statique ainsi que d'autres éléments empruntés à divers langages.

Un programme écrit en Hack s'éxécute au sein d'une machine virtuelle HHVM, ce qui permet de le faire cohabiter de façon transparente avec des programmes en PHP.

Présenté officiellement le , Hack est utilisé sur la quasi-totalité du site de Facebook. À cette date, les principales différences à noter avec la version 5.5 de PHP sont :

<?hh echo "Hello world"; ?>
int $x = 1;
function f (int $x) : string {
    if ($x == 1) {return "Hello world";}
    else {return "x est différent de 1";}
}
class Liste<T> {
    public function insert (T $data) : void {
        /* insère dans la liste la donnée de type T */
    }
    public function count() : int {
        /* retourne le nombre d'éléments de la liste */
    }
}
function estNul (?int $x) : bool {
    if ($x == null) {return true;}
    else {return false;}
}
$chiffres_impairs = Vector {1,3,5,7,9};
foreach ($chiffres_impairs as $chiffre) {
    echo $chiffre." est un chiffre impair.\n";
}
function ajouteExtensionHack() : (function(string): string) {
    $extension = '.hh';
    return $y ==> $x.$extension;
}
function test(): void {
    $fonction = ajouteExtensionHack();
    echo $fonction ('index'); // affiche "index.hh"
}
type Point = (int,int);
type VecteurEntiers = vector<int>;
// (fichier 1)
newtype Ordonnee = int;
newtype Abscisse = int;

Abscisse $x = 1;  // OK
int      $y = $x; // OK
Abscisse $z = $x; // OK
// (fichier 2)
Abscisse $x = 1;  // OK
int      $y = $x; // erreur : types incompatibles
Abscisse $z = $x; // OK
type Voiture = shape { 'modele' => string, 'couleur' => string, 'decapotable' => bool };
Voiture $v;
$v['modele'] = 'Ferrari';
$v['couleur'] = 'rouge';
$v['decapotable'] = true;

Références

  1. ↑ « Release 4.172 », (consulté le )
  2. ↑ Julien Verlaguet présente Hack. - Interview dans Infoworld.