PHP 7: Skriptsprache kommt in der Gegenwart an
Über 11 Jahre nach der Veröffentlichung von Version 5 hat das PHP-Projekt mit PHP 7.0.0 endlich den großen Release-Sprung vollzogen. Der Druck durch Facebooks Konkurrenztechnik HHVM hat zu etlichen performancerelevanten Überarbeitungen geführt.
- Sebastian Bergmann
- Christian Kirsch
Über 11 Jahre nach der Veröffentlichung von Version 5 hat das PHP-Projekt mit PHP 7.0.0 endlich den großen Release-Sprung vollzogen. Der Druck durch Facebooks Konkurrenztechnik HHVM hat zu etlichen performancerelevanten Überarbeitungen geführt.
Mehr als 180Â Entwickler haben an PHPÂ 7 gearbeitet, nur wenige wie Anatol Belski von Microsoft und Dmitry Stogov von Zend bekamen Geld dafĂĽr. In der neuen Version stecken knapp 10.000Â Ă„nderungen gegenĂĽber PHPÂ 5.
Warum die heute veröffentlichte Version nicht PHP 6 heißt, ist genau so amüsant wie die Theorien darüber, warum Microsoft Windows 10 nicht Windows 9 genannt hat: Das 2009 veröffentlichte PHP 5.3 hätte eigentlich PHP 6 heißen sollen. Damals war die native Unterstützung für Unicode als Grund für den Versionssprung vorgesehen. Als die Entwickler sie aufgaben, wurde aus PHP 6 eben PHP 5.3. Jedoch hatten einige Verlage Bücher über PHP 6 angekündigt und manche sogar bereits veröffentlicht. Wenn sechs Jahre später ein PHP 6 erscheint, das nichts mit der für 2009 geplanten Version zu tun hat, könnten diese Bücher Entwickler verwirren. Deshalb entfällt Version 6.
Ă„nderungen unter der Haube
Die Arbeit an PHP 7 nahm im Sommer 2014 Fahrt auf, als die Entwicklungen aus dem PHPNG-Branch in den Code einflossen. In diesem Entwicklungszweig hatte Dmitry Stogov den ausführenden Kern von PHP refaktoriert, damit das Programm schneller läuft und weniger Speicherplatz benötigt. Insgesamt nahmen die Entwickler für PHP 7 Hunderte Optimierungen an diesem Kern vor – unter anderem, um von Verbesserungen in aktuellen C-Compilern profitieren, verstärkt CPU-Caches nutzen, Arbeitsspeicher effizienter alloziieren, Hashtables performanter verarbeiten und besseren PHP-Bytecode erzeugen zu können.
In einem Vortrag auf der FrOSCon-Konferenz im August 2015 präsentierte Sprachschöpfer Rasmus Lerdorf zu Beginn der Release-Candidate-Phase von PHP 7.0 einige Benchmarks, welche die Leistungsverbesserungen anschaulich demonstrieren. Beispielsweise kann das neue PHP 80 Prozent mehr Drupal-8-Requests pro Sekunde verarbeiten als PHP 5.6 und 30 Prozent mehr Requests pro Sekunde als die von Facebook entwickelte HipHop Virtual Machine 3.7 (HHVM).
Bei WordPress 4.1.1 zeigen sich die Verbesserungen noch eindrucksvoller: PHPÂ 7.0 verarbeitet mehr als doppelt so viele Anfragen pro Sekunde wie PHPÂ 5.6. Ohne weitere Optimierungen liegt es allerdings bei diesem Wert um 6Â Prozent hinter HHVM. Kompiliert man PHPÂ 7.0 jedoch selbst und "trainiert" den PHP-Interpreter unter Verwendung der von GCC unterstĂĽtzten Feedback-Directed Optimization (auch als Profile-Guided Optimization bekannt) auf die AusfĂĽhrung von WordPress, liegen PHP 7.0 und HHVM gleichauf.
Nicht nur bei dem Teil des Kerns von PHP, der Bytecode ausfĂĽhrt, blieb kaum ein Stein auf dem anderen. Viel Arbeit floss auch in die grundlegende Ăśberarbeitung von Lexer, Parser und Bytecode-Generator. Der PHP-Lexer ist nun kontextsensitiv) und unterstĂĽtzt semireservierte SchlĂĽsselworte. Das erlaubt die Nutzung der meisten SchlĂĽsselworte als Namen von Attributen, Konstanten und Methoden in Klassen, Interfaces und Traits. Die einzige Ausnahme ist class, das weiterhin nicht an diesen Stellen auftauchen darf. Als Namen von Klassen, Interfaces und Traits sind SchlĂĽsselworte weiterhin verboten.
Statt direkt aus dem Parser heraus Bytecode zu erzeugen, wird nun zunächst ein abstrakter Syntaxbaum erstellt. Er bildet die Grundlage für das Erzeugen von Bytecode und steht darüber hinaus über APIs wie php-ast von Nikita Popov oder Sara Golemons astkit zur Verfügung. Mit ihrer Hilfe lassen sich beispielsweise in PHP selbst effizient Werkzeuge für die statische Codeanalyse von PHP-Code erstellen. Ferner entspricht die Verwendung eines abstrakten Syntaxbaums im Parser eher dem Status quo in der Implementierung von Compilern als das, was an dieser Stelle bislang in PHP geschah. Dieses Refactoring des Parsers macht Änderungen an der PHP-Syntax nicht nur einfacher, sondern auch risikoärmer. Darüber hinaus wird es in Zukunft für Entwickler, die neu zum PHP-Projekt hinzustoßen, deutlich einfacher sein als bisher, sich in die Arbeitsweise des Compilers einzuarbeiten.