© saicle/Shutterstock.com
Die alternative PHP-Laufzeitumgebung

HHVM


Seit sechs Jahren entwickelt und betreibt Facebook alternative Laufzeitumgebungen für PHP. Höchste Zeit, Licht in den Dschungel von Begriffen wie HipHop, HPHPc, HPHPi, HHVM und Hack zu bringen.

PHP ist eine dynamisch getypte [1] Programmiersprache, die sowohl prozedurale [2] als auch objektorientierte [3] (und in Ansätzen sogar funktionale [4]) Programmierung unterstützt. In einer dynamisch getypten Programmiersprache kann der Datentyp einer Variablen im Programmverlauf geändert werden. In einer statisch getypten [5] Programmiersprache ist dies nicht möglich, da bei der (erforderlichen) Deklaration der Datentyp der Variable festgelegt wird: Werte mit einem anderen Datentyp können der Variablen nicht zugewiesen werden.

Die Referenzimplementierung dieser Programmiersprache, die von www.php.net heruntergeladen werden kann, liest den Quelltext eines in PHP geschriebenen Programms ein, analysiert ihn und führt ihn schließlich aus. Man spricht bei diesem Ansatz der Programmausführung davon, dass der Quelltext interpretiert [6] wird. Beispiele für andere Programmiersprachen, die in der Regel interpretiert ausgeführt werden, sind Perl, Python und Ruby. Im Gegensatz zu einem Interpreter übersetzt ein Compiler [7] den Quelltext eines Programms in eine vom Computer direkt ausführbare Datei. Dies ist beispielsweise bei C oder C++ der Fall. Und natürlich gibt es nicht nur die beiden Extreme Compiler und Interpreter sondern auch Mischformen dazwischen. Ein Java-Programm wird beispielsweise von einem Compiler in Java-Bytecode [8] übersetzt. Dieser wird von der Java-Laufzeitumgebung, der Java Virtual Machine (JVM) [9], ausgeführt. Ursprünglich erfolgte die Ausführung von Java-Bytecode nicht wesentlich anders als in einem Interpreter. Mittlerweile wird Java-Bytecode just in time (JIT) [10] in Maschinencode übersetzt, der direkt ausgeführt (und nicht interpretiert) wird. Bei diesem Ansatz der Codeausführung verbindet man die Vorteile von plattformunabhängigem Bytecode mit der überlegenen Performance der Ausführung von nativem Maschinencode [11].

Die Tatsache, dass die Referenzimplementierung von PHP ein Interpreter ist, hat mit Sicherheit erheblich dazu beigetragen, dass PHP so populär geworden ist. Schließlich genügt es so, nach einer Änderung am Quelltext einfach F5 im Browser zu drücken, um den Effekt der Änderung zu sehen. Ein explizites und zeitaufwändiges Kompilieren des Quelltexts entfällt und der Entwickler muss nicht – wie bei anderen Programmiersprachen üblich – auf den Compiler warten, bevor er weiter arbeiten kann. Diesen Produktivitätsgewinn, der durch die Verwendung eines Interpreters während der Entwicklungszeit erreicht wird, gibt es aber nicht ohne Preis: Viele Programmierfehler können bei der Verwendung eines Interpreters erst zur Laufzeit gefunden werden. Ein Compiler kann diese Fehler bereits während der Entwicklung aufdecken. Hinzu kommt, dass ein Interpreter den Quelltext ja auch in gewisser Weise übersetzen muss, bevor er ihn ausführen kann. Diese zeitaufwändige Operation muss er, da das Ergebnis der Übersetzung nicht gespeichert wird, im Falle von PHP bei jedem Request aufs Neue durchführen. Genau an dieser Stelle setzen die so genannten Bytecode-Caches an: Sie speichern den so genannten PHP-Bytecode im Shared Memory und erzeugen ihn nur dann neu, wenn sich die entsprechenden Quelltextdateien geändert haben. Ein solcher Bytecode-Cache ist beispielsweise der seit PHP 5.5 mit dem PHP-Interpreter gebündelte OPCache [12].

Wie alles begann: HPHPc und HPHPi

Bereits seit Anfang 2008 entwickelt Facebook unter dem Codenamen „HipHop for PHP“ (kurz: HipHop) eine alternative Laufzeitumgebung für die Programmiersprache PHP. Initiiert wurde das Projekt von Haiping Zhao, ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang