HHVM 3.23 ist auf das Language Server Protocol vorbereitet

Die Hip Hop Virtual Machine soll sich mit dem Protokoll künftig einfach in Tools wie Visual Studio Code und Eclipse einbinden lassen. Daneben gibt es unter anderem Änderungen für optional- und nullable-Felder in Shapes.

In Pocket speichern vorlesen Druckansicht
HHVM .3.23 ist auf das Language Server Protocol vorbereitet
Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag

Facebook hat mit Version 3.23 der Hip Hop Virtual Machine (HHVM) das voraussichtlich vorletzte Release mit offiziellem PHP-Support herausgegeben, bevor sich die Macher der virtuellen Maschine ausschließlich auf Facebooks Skriptsprache Hack konzentrieren. Für Letztere enthält die aktuelle Version mit HackC einen experimentellen alternativen Bytecode-Emitter, der aktuell nur für Linux verfügbar ist und mittelfristig die bisherige Toolchain aus Parser und Bytecode-Emitter ersetzen soll.

Hinsichtlich der Entwicklerwerkzeuge gibt es zudem eine interessante Neuerung zur Anbindung an Entwicklungsumgebungen: HHVM ist für den Einsatz mit dem Language Server Protocol (LSP) vorbereitet, das Microsoft, Red Hat und Codenvy im Sommer 2016 vorgestellt hatten. Das Protokoll trennt die Logik für einzelne Programmiersprachen von der Entwicklungsumgebung. Ein lokaler Server übernimmt sprachspezifische Vorgänge beispielsweise die Suche nach Klassendefinitionen oder das Erkennen von Fehlern. Zu den IDEs, die LSP bereits vollständig verwenden, gehören Visual Studio Code, Eclipse und Atom. Für HHVM starten Entwickler mit hh_client lsp einen passenden LSP-Server.

Auch hinsichtlich der Syntax gibt es einige wenige Neuerungen. So unterscheidet HHVM nun innerhalb von Shapes zwischen nullable- und optional-Feldern. Damit gelten nur als Ersteres gezeichnete Felder als erforderlich. Sollen sie – wie bisher implizit – zusätzlich optional sein, müssen sie ein ? sowohl vor dem Feldnamen als auch vor dem Typ ausweisen, wie folgendes Beispiel von der HHVM-Site deutlich macht:

<?hh
type MyShape = shape(
'nullable' => ?string,
?'optional' => string,
?'nullableAndOptional' => ?string,
);

Zudem entfällt das implizite Subtyping von Shapes: Bisher galt ein Shape als Untertyp eines anderen, wenn es alle benötigten Felder besaß, auch wenn es darüberhinaus zusätzlich aufwies. Nun müssen Entwickler diese Form des Subtyping explizit erlauben, indem sie ... ans Ende der Feldliste setzen:

type ImplicitSubtypes = shape(
?'foo' => string,
...
);

Einige Änderungen zielen bereits auf die nächsten Releases. Unter anderem dürfen Funktionen nicht mehr using() verwenden, um einen Konflikt mit dem für Version 3.24 geplanten Schlüsselwort using zu vermeiden, das Variablen entweder auf einen bestimmten Block oder eine Funktion einschränkt. Außerdem sollen Destruktoren künftig gänzlich verschwinden. Derzeit führt bereits die Konfigurationszeile hhvm.allow_object_destructors = false zu Laufzeitfehlern beim Instanziieren einer Klasse, die einen Destruktor enthält. Entwickler können mit <<__OptionalDestruct>> Destruktoren als Ausnahme kennzeichnen und damit Laufzeitfehler vermeiden. Allerdings garantiert das Whitelisting nicht das Ausführen der Methode.

Weitere Neuerungen der HHVM 3.23 lassen sich dem Blogbeitrag entnehmen. Die für Januar 2018 geplante Version 3.24 wird die letzte mit garantierter PHP-5-Unterstützung sein, und PHP 7 steht nur kurzfristig auf der Agenda. Im September hatten die Macher die schrittweise Abkehr von PHP beschlossen, um sich ausschließlich auf die Programmiersprache Hack zu konzentrieren, die maßgeblich von PHP inspiriert ist und zusätzlich unter anderem Generics und statische Typisierung bietet. (rme)