HipHop – Convert PHP to C++

Vor kurzem habe ich durch Zufall auf dem Entwickler Blog von Facebook einen Artikel darüber gelesen, dass ein Entwickler (Haiping Zhao) ein Programm geschrieben hat, dass aus PHP C++ Code erstellt. Ein wenig habe ich auch damit herum gespielt und getestet. Die Ergebnisse möchte ich natürlich festhalten.

Was ist mit HipHop möglich?

Für mich ist HipHop auf keinen Fall DIE Lösung um PHP zu beschleunigen. Es ist immer besser, in einer Sprache selbst zu schreiben. Der Vorteil, wie aus dem Artikel hervorgeht, ist die Möglichkeit, mit PHP sehr schnell und einfach Programme entwickeln zu können. Ganze Softwareprojekte in einer anderen Programmiersprache neu zu schreiben ist, abgesehen davon die Sprache erstmal zu beherrsche, natürlich ein enormer Zeitaufwand.

HipHop kann aus PHP Code C++ Code erzeugen, der Optimiert und kompiliert wird. Wer schon schlechten PHP Code hat, darf von dem kompiliertem Endprodukt keine Wunder erwarten.

Was ist mit HipHop nicht möglich?

Abgesehen davon was derzeit alles noch nicht unterstützt wird, gibt es natürlich Grenzen, die nur sehr, sehr schwer überwunden werden können. Eval z.B. gibt es nur in Interpretersprachen. Viele CMS und Blogsysteme (auch WordPress) verwenden diese Funktion leider.

Genauso können grobe Programmierfehler in PHP mittels Code Optimizer natürlich nicht ausgebügelt werden. Im glücklichstem Fall kommt es zu einem Fehler, wenn das Programm kompiliert wird. Im schlimmsten Fall funktioniert rein nichts oder alles sehr schlecht.

Ein weiteres Problem stellt die Typsicherheit dar. Wird eine Variable in C++ als Integer Deklariert kann diese Variable selber nicht mehr verändert werden. In PHP kann diese Variable einfach mit irgend etwas überschrieben werden. Es sollte bei der Entwicklung also darauf geachtet werden möglichst Typsicher zu programmieren. In einer Variable erst einen Integer zu speichern und später einen String währe ein grober Fehler.

Und was ist jetzt mit der Performance?

Nachdem ich ein wenig herum gespielt habe wollte ich natürlich von der enormen Performancesteigerung etwas sehen und habe mir ein paar Aktionen in PHP zusammen geschrieben.

Getestet habe ich

  • Grundrechenarten
  • das erstellen einer md5/sha1 Summe
  • Stringoperationen (substr z.B.)
  • Array (schreiben/lesen)

Das kompilierte Programm hat einen Memory-Peak von 0.5 MB. PHP hat mit 2.5 MB deutlich mehr.

Was Laufzeit angeht, kann ich Facebook derzeit noch nicht bestätigen.

Kompiliert: 1.2 Sekunden
PHP: 1.7 Sekunden

Jedoch, denke ich, wird der Performanceunterschied bei größeren Programmen und in realistischen Tests schneller deutlich.

HipHop installieren (CentOS 5.5 x86_64)

In dem Wiki auf GitHub wurde ein Artikel veröffentlicht, der zeigt, wie HipHop unter CentOS über eine Repository bezogen werden kann. Da der Artikel derzeit nicht zur Verfügung steht, möchte ich hier kurz zeigen, was nötig ist. Alternativ kann natürlich auch die original Anleitung von tag1consulting auf englisch gelesen werden.

1.

Folgende Pakete müssen heruntergeladen und installiert werden:

rpm -ivh http://epel.osuosl.org/5/x86_64/epel-release-5-4.noarch.rpm
rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1.0-6.ius.el5.noarch.rpm
rpm -ivh http://pkg.tag1consulting.com/hphp/x86_64/hphp-release-1.0-2.el5.noarch.rpm

2.

Danach muss der Cache von yum aktualisiert werden.

yum makecache

3.

Der Installation steht jetzt nichts mehr im Weg:

yum install hiphop-php

Sollte es zu Konflikten kommen, müssen ältere Versionen von PHP und MySQL entfernt werden.

yum remove php* mysql*

Ich empfehle eine eigene Sandbox/VM für HipHop. Es sollte nicht auf Produktivsystemen eingesetzt werden, da Sicherheitsupdates für PHP und MySQL somit nicht mehr möglich sind.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.