Hack | ||
Date de première version | 2014 | |
---|---|---|
Paradigmes | Impératif, objet, fonctionnel, procédural, réflexif. Langage interprété |
|
Auteur | ||
Développeurs | ||
Dernière version | 4.172 ()[1] | |
Typage | Statique, Fort | |
Influencé par | PHP | |
Écrit en | OCaml | |
Système d'exploitation | Multiplate-forme | |
Licence | Licence BSD | |
Site web | hacklang.org | |
modifier |
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 [2], 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;