HipHop
# HipHop

HipHop for PHP ist eine freie Software, die ursprünglich PHP-Skripte zu Zwecken der Leistungssteigerung in C++-Quellcode übersetzt, der dann – üblicherweise mittels g++ – in die jeweils nötige Maschinensprache übersetzt wird. Mittlerweile ist mit HHVM eine virtuelle Maschine für die Ausführung von der von Facebook entwickelten Programmiersprache Hack verfügbar.

## Geschichte

HipHop wurde ursprünglich bei Facebook unter Leitung von Haiping Zhou auf CentOS- und Fedora-Systemen entwickelt. Es folgt früheren ähnlichen Entwicklungen wie phc und Roadsend PHP Compiler (kompilieren zu C) oder Quercus und Project Zero (Java-Implementierungen von PHP) oder Phalanger (Compiler für .NET). Es war wohl schon über zwei Jahre in der Entwicklung, bevor die Veröffentlichung als freie Software unter der PHP-Lizenz für den 2. Februar 2010 angekündigt wurde. Der Termin konnte aufgrund technischer Probleme nicht eingehalten werden, doch am 20. Februar landete dann der Quellcode wie versprochen im Git-Repository. Die Software ist bei Facebook für die Abfertigung hunderter Millionen von Nutzern im Einsatz. In den folgenden Monaten wurde an weiterer Beschleunigung von HipHop gearbeitet und Unterstützung für einen Teil der neuen Merkmale von PHP 5.3 umgesetzt. Weiterhin wurde von Hui Chen im Rahmen eines Google-Summer-of-Code-Stipendiums die Portierung auf 32-Bit-Plattformen umgesetzt.

## HPHPc

Der ursprüngliche HipHop-Compiler HipHop for PHP (HPHPc) wandelte PHP-Code in C++-Code um. Durch die Kompilierung werden deutlich höhere Ausführungsgeschwindigkeiten beziehungsweise niedrigere Prozessorlasten erreicht als bei Interpretierung der PHP-Skripte zum Beispiel durch die Zend Engine, bei der die Befehle zumindest teilweise für jeden Gebrauch neu in die Maschinensprache übersetzt werden müssen.

Es wurde damit eine nativ ausführbare Programmdatei erzeugt, die auch den Webserver gleich mit enthält und somit selbst direkt auf HTTP-Anfragen antwortet und den Web-Server, beispielsweise Apache, unnötig machte.

Im Unterschied zu anderen Ansätzen zur Steigerung der Ausführungsgeschwindigkeit von PHP brachte HipHop eine deutliche weitere Geschwindigkeitssteigerung bis Faktor 6 und verringerte Speicherbelegung – unter anderem, da damit parallele Server-Anfragen nicht in getrennten Prozessen mit entsprechend getrennten Speicherbereichen bearbeitet wurden. Dies kann bei Websites mit sehr hohen Besucherzahlen bedeutende Leistungssteigerungen oder Ressourcenersparnisse bewirken.

HipHop wird als freie Software mit Quellcode unter Version 3.01 der PHP-Lizenz verbreitet. Der Quelltext umfasst mehr als 300.000 Zeilen in C++ und C.

HPHPc unterstützt PHP ab Version 5.3, wobei auf einige seltener benutzte PHP-Merkmale wie die dynamischen Sprachmerkmale eval und create_function verzichtet wird.

## HHVM

Wegen der verschiedenen absehbaren Einschränkungen des zum Debugging dienenden HPHPd begann Facebook bereits 2010, einen alternativen Ansatz zu untersuchen. Dabei wurde PHP in einer virtuellen Maschine ausgeführt, der HipHop Virtual Machine oder kurz HHVM. HHVM überträgt PHP-Code in einen abstrakten Bytecode (HHBC genannt). Dieser Bytecode wird dann dynamisch zur Laufzeit in ×64-Maschinensprache durch einen JIT-Compiler übersetzt. Dies ist vergleichbar mit dem Ansatz der virtuellen Maschinen von anderen Sprachen wie Java (JVM) und C# (CLR) oder mit Microsofts sprachunabhängiger Common Intermediate Language für das .Net-Framework.

HHVM unterstützt im Juli 2013 noch nicht alle Funktionen von PHP 5.4, geht aber über PHP 5.3 hinaus. Ende 2012 erreichte HHVM die Geschwindigkeit von HPHPc.

Anfang 2013 wechselte der Betrieb von Facebook von HPHPc auf HHVM. Damit wurden HPHPc für den Realbetrieb und HPHPd für den Testbetrieb abgelöst.

Ab August 2014 testete die Wikimedia Foundation die Verwendung von HHVM für die Wikipedia. Seit dem 25. November 2014 wird HHVM für alle Nutzer der Wikipedia genutzt. Seit Januar 2019 wird jedoch eine Umstellung auf PHP 7 getestet, da HHVM entschieden hat, den Support für PHP einzustellen, es wird nur noch Hack unterstützt. Die Verwendung von PHP 7 wird derzeit als Beta-Feature erprobt.

