Hack (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 12. Juni 2016 um 11:58 Uhr durch Horst Gräbner (Diskussion | Beiträge) (Änderungen von 80.141.247.139 (Diskussion) auf die letzte Version von 2A02:8070:6191:3D80:6A5D:43FF:FE91:FE01 zurückgesetzt). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen
Hack
Logo
Basisdaten
Erscheinungsjahr: 2014
Designer: Julien Verlaguet, Alok Menghrajani, und andere[1]
Entwickler: Facebook Inc.
Aktuelle Version 4.172[2] (2. November 2022)
Typisierung: schwach, dynamisch, statisch
Beeinflusst von: PHP, Java, C#, Objective CAML, Scala, Haskell
Lizenz: BSD-Lizenz
hacklang.org

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 Facebook Inc., das schrittweise ihr ursprünglich in PHP geschriebenes 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.

<?hh
echo 'Hello World';
?>

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

Hello World

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:

<?hh
class typing
{
     private int $zahl = 0;
     protected string $text;
     public ?string $optional;      // ...muss nicht initialisiert werden

     public function __construct() 
     {
         $this->text = '';          // Jede Klasseneigenschaft muss initialisiert werden.
     }

     public function zeige_pi(): float
     {
         return round(pi(), 5);
     }

     public function ist_null(?T $wert): bool
     {
         return $wert === null;
     }

}
?>

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.

class Gedicht
{
     protected Vector<string> $gedicht = Vector(
           'Ein Schnupfen hockt auf der Terrasse',
           'auf daß er sich ein Opfer fasse',
           'und stürzt alsbald mit voller Grimm',
           'auf einen Menschen namens Schrimm.',
           'Paul Schrimm erwidert prompt: "Pitschü!"',
           'und hat ihn drauf bis Montag früh.');

    public function abgeben(): Vector<string>
    {
          return $this->gedicht;
    }

    public function aufsagen(): string
    {
          $rezitation = '';
          foreach($this->gedicht as $zeile)
          {
               $rezitation .= $zeile."\n";
          }

          return $rezitation;
    }
}

Set

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

$karten = Set {"Bube", "Dame", "König", "As"};

$karten[] = "Bube"; // Ohne Effekt, denn Bube ist schon Teil des Sets.

$karten->remove("Dame");
$karten->add("Joker");

Map

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

$map = Map {"A" => 1, "E" => 5, "D" => 4, "B" => 2, "C" => 3};

foreach($map as $schluessel => $wert)
{
     echo $wert."\n"; // Gibt die Werte 1, 5, 4, 2, 3 aus.
}

Lizenz und Bezug

Hack wird unter der BSD-Lizenz vertrieben. Die Software kann kostenlos aus dem Internet geladen werden, der Code wird auf GitHub verwaltet.

Einzelnachweise

  1. Contributors to facebook/hhvm. Github.com, abgerufen am 25. März 2014.
  2. Release 4.172. 2. November 2022 (abgerufen am 15. April 2024).

Weblinks