Hiphop Virtual Machine: Facebook entwickelt JIT-Compiler für PHP
Anfang 2010 hatte Facebook sein Projekt Hiphop vorgestellt, das mit dem Hiphop Compiler PHP-Code in C++ und letztendlich in nativen Code umwandelt, was die Ausführungsgeschwindigkeit des Codes deutlich steigert. Damit die Entwickler ihren Code nicht für jede Änderung neu kompilieren müssen, hatte Facebook zusätzlich den Hiphop Interpreter entwickelt, der aber zusätzlichen Pflegeaufwand verursacht.
Mit dem Ziel, Compiler und Interpreter wieder zu vereinen, hat Facebook im vergangenen Jahr begonnen, sich mit der dynamischen Übersetzung von PHP-Code in nativen Code zu beschäftigen. Das Ergebnis ist eine neue PHP-Execution-Engine, die auf der Hiphop Language Runtime basiert. Sie wird Hiphop Virtual Machine (hhvm) genannt(öffnet im neuen Fenster) .
Die Hiphop Virtual Machine wandelt PHP-Code in Bytecode um und nutzt dazu Teile des Hiphop Compilers. Der Bytecode wird dann von Hiphop Bytecode (HHBC) ausgeführt. Dabei nutzt Facebook eine sehr einfache Form von Tracing, das nur auf einzelne Blöcke angewendet wird.
Im Vergleich zum Hiphop Interpreter ist die Hiphop Virtual Machine in einem Facebook-spezifischen Benchmark rund 60 Prozent schneller. Ein Vergleich mit dem Hiphop Compiler sei hingegen schwierig. Facebook geht aber davon aus, dass die Ergebnisse der Hiphop Virtual Machine näher an denen des Hiphop Compilers liegen als an denen des Hiphop Interpreter. Der Compiler ist rund fünfmal schneller als der Interpreter.
Für Facebook bedeutet das schnellere Entwicklungszyklen, da sich Code mit der neuen Hiphop Virtual Maschine schneller testen lässt als mit dem Hiphop Interpreter. Zudem gehen die Facebook-Entwickler davon aus, die Geschwindigkeit der Hiphop Virtual Machine in den nächsten Monaten weiter erhöhen zu können, so dass die Ergebnisse des neuen Ansatzes dank Tracing bald schneller laufen als der vom Hiphop Compiler erstellte Code.
Der Code der Hiphop Virtual Machine ist eng mit dem Hiphop-Quellcode verzahnt, den Facebook per Github(öffnet im neuen Fenster) als Open Source zur Verfügung stellt.



