Hack (Programmiersprache)
# Hack (Programmiersprache)

Hack ist eine Skriptsprache für die HipHop Virtual Machine (HHVM). Hack erweitert die Programmiersprache PHP u. a. um statische Typisierung und Generics. Jeder PHP-Code kann auch mit dem Hack-Compiler kompiliert werden. Entwickelt wurde Hack vom Unternehmen Meta Platforms (vormals Facebook Inc.), das schrittweise ihre ursprünglich in PHP geschriebene Social-Network-Webanwendung Facebook auf die neue Sprache Hack umstellt, da die ursprüngliche Verwendung von PHP zusammen mit der Zend Engine die hohen Performanceanforderungen von Facebook nicht mehr befriedigen konnte. Anfang April 2014 wurde die neue Sprache von Facebook Inc. offiziell vorgestellt und als Open Source frei verfügbar gemacht.

## Syntax

Ähnlich wie PHP-Code steht auch Hack in Tags, jedoch wird hier <?hh ?> statt <?php ?> verwendet.

Hack nutzt weitestgehend dieselben Sprachkonstrukte und Funktionen wie PHP, daher würde obiger Code analog zu PHP folgende Ausgabe generieren:

### Syntax seit HHVM 4.0

Seit der HHVM Version 4.0 sollten Hack-Scripte wie folgt geschrieben werden:

## Features

### Statische Typisierung

Ein Kernelement der Sprache ist die Typ-Prüfung. Obwohl PHP auf rund 80 % der Webseiten als serverseitige Sprache zum Einsatz kommt, kritisieren viele Entwickler die dynamische Typisierung der Sprache, die ihrer Meinung nach die Fehleranfälligkeit deutlich erhöht. Der in Hack verwendete Typ-Checker hält den Quellcode im Speicher und überwacht die Festplatte auf Änderungen an der Datei. Dadurch sind die Checks in 200 Millisekunden möglich und erzeugen keine merkbaren Verzögerung beim Programmieren, Fehler können schon vor der ersten Ausführung sichtbar gemacht werden. Da null ein Wert ist, der allen anderen verwendeten Typen nicht entspricht, muss seine Verwendung in Hack explizit durch ein vorangestelltes Fragezeichen erlaubt werden (Nullable). Auch müssen Eigenschaften einer Klasse initialisiert werden, wenn sie nicht optional sind. Sowohl für Variablen als auch für Eigenschaften und Methoden von Klassen und deren Parameter kann der Programmierer nun den Datentyp im Vorfeld festlegen:

### Generics

Neben einfachen, untypisierten Arrays bietet die Sprache weitere, spezielle Felder – Generics. In Hack implementieren diese Feldtypen, wie auch die meisten anderen Typen in Hack, ein zugreifbares Interface, sodass Methoden auf diesen objektähnlichen Strukturen aufgerufen werden können. Auch eigene Generics können erstellt werden.

**Vector**

Ein Vector ist ein streng typisiertes Array. Der Typ der Einträge wird durch den ersten festgelegt. Der Typ kann bis auf die Wertebene streng festgelegt werden.

**Set**

Ein KeySet ist ein Array, in dem jeder Wert nicht mehr als ein einziges Mal vorkommt.

**Map**

Eine Map (dict) ist eine Sammlung von Schlüssel-Wert-Paaren, ähnlich einem Wörterbuch. Anders als assoziative Arrays behalten Werte in einer Map die Reihenfolge, in der sie eingefügt wurden.

