Skriptsprachen: Was alles in PHP 8 landen soll
Für die noch dieses Jahr vorgesehene nächste Generation der Skriptsprache kristallisieren sich die Neuerungen heraus.
- Alexander Neumann
PHP-Entwickler Brent Roose hat in einem Blog-Beitrag schön übersichtlich die zu erwartenden Neuerungen in PHP 8.0 vorgestellt. Die nächste Generation der Skriptsprache soll Ende dieses Jahres erscheinen.
Beim neuen Release handelt es sich um eine neue Hauptversion. Es ist daher anzunehmen, dass einiges an bestehendem Code nicht mehr kompatibel mit der neuen Entwicklung sein wird. Das Upgrade sollte jedoch nicht allzu schwer sein, da die meisten Änderungen, die zu einem Bruch führen können, wohl bereits in den 7.x-Versionen veraltet waren, so Roose.
JIT-Compiler und Union Types
Unter den Neuerungen nimmt wahrscheinlich der JIT-Compiler (Just In Time) eine herausragende Rolle ein. JIT ist eine Compilerstrategie, die Zwischencode ableitet und diesen zur Laufzeit in architekturabhängigen Maschinencode verwandelt – das dann "just in time" direkt über die CPU und nicht mehr über die Zend Virtual Machine. An der JIT-Unterstützung in PHP wird seit geraumer Zeit gearbeitet. Mit ihr hat die Skriptsprache das Potenzial, gerade bei CPU-nahem Code noch mal eine Schippe drauf zu legen – gerade wo die jüngsten PHP-Releases eh schon etliche Performanceverbesserungen aufweisen konnten.
Ein weiteres wichtiges neues Feature sind eine weitergehende Unterstützung von Union Types. Diese schon in Programmiersprachen wie Haskell, TypeScript, C/C++ und Rust verwendeten Typen sind eine Sammlung von zwei oder mehr Typen, die darauf hinweisen, dass jeder dieser Typen verwendet werden kann. Ein weiterer Punkt unter dem Schlagwort "Static return type" schlägt vor, static
auch als Rückgabetyp verwendbar zu machen – neben den bereits verwendbaren Typen self
und parent
.
Kleinkram
Aufbauend auf den in PHP 7.4 hinzugefĂĽgten Weak References wird in PHP 8 eine WeakMap
-Implementierung hinzugefĂĽgt. WeakMaps
enthalten Verweise auf Objekte, die nicht verhindern, dass diese Objekte im Garbage Collector landen. Ein kleines, aber nĂĽtzliches neues Feature ist nun, ::class
auf Objekte anzuwenden, anstatt get_class()
auf ihnen zu verwenden. Es funktioniert wohl auf dieselbe Weise wie get_class()
. Die neue Funktion fdiv
macht etwas Ă„hnliches wie die Funktionen fmod
und intdiv,
die eine Division durch 0 erlaubt. Anstelle von Fehlern erhalten Entwickler je nach Fall INF
, -INF
oder NAN
.
Damit nicht genug, gibt es weitere kleinere Neuerungen, die der Blog-Beitrag kurz anreißt – genauso wie die sogenannten Breaking Changes oder der Hinweis, dass die zuvor als "deprecated" gesetzten Funktionen aus PHP 7.2 bis 7.4 nun entfernt werden. Außerdem weist Roose jeweils auf die entsprechenden RFCs (Request for Comments) hin. (ane)