News

PHP 8 kommt mit JIT-Compiler und weiteren Neuerungen

(Volodymyr Burdiak/Shutterstock)

Ende 2020 soll die Programmiersprache PHP ein Major Update erhalten. Für Version 8 sind neben einem JIT-Compiler für deutlich mehr Performanz auch beliebige Union-Types, static Return Types und konsistente Type Errors für vereinfachtes Type-Handling geplant.

Auf seinem Blog führt PHP-Entwickler Brent Roose eine fortlaufende Liste der geplanten und beschlossenen Neuerungen für das nächste Major Release von PHP. Die neue Version ist momentan „under heavy development“. Bis zum Release Ende des Jahres werden sich also mit Sicherheit noch weitere Änderungen ergeben. Den Blogpost will Roose bis dahin regelmäßig updaten.

JIT-Compiler

Unter den bereits beschlossenen Neuerungen ist ein Just-in-Time-Compiler, der für deutlich mehr Performanz sorgen soll – wenn auch wohl eher weniger im Kontext von Web Requests. Dahinter steckt folgendes:

PHP ist, anders als Rust, C oder Java eine interpretierte Sprache. Der Code wird nicht kompiliert, sondern während der Laufzeit Zeile für Zeile interpretiert, das heißt, für die CPU in Maschinencode übersetzt. Der JIT-Compiler soll Teile eures PHP-Codes künftig während der Laufzeit kompilieren. Vorstellen könnt ihr euch das wie eine gecachte Version des interpretierten Codes, die während der Laufzeit erstellt wird. Wie das funktioniert? Der JIT-Compiler verfügt über eine Funktionalität, die den Code während der Laufzeit überwacht. Teile davon, die mit hoher Frequenz wiederholt ausgeführt werden, können dann zu optimiertem Maschinencode kompiliert werden und anstelle des eigentlichen Codes on the fly verwendet werden. Für einen Deep Dive in die Thematik sei euch dieser Crashkurs  von Mozilla ans Herz gelegt.

Union Types

Union Types sind eine Zusammenfassung – oder Union – zweier oder mehrerer Typen, über die angezeigt wird, dass alle in der Union genannten Typen verwendet werden können, zum Beispiel so:

public function foo(Foo|Bar $input): int|float;

static wird zum validen Return Type

static ist ein spezieller Klassenname in PHP, der die Klasse referenziert, auf die eine Methode aufgerufen wird, auch wenn die Methode vererbt ist. In PHP 8 wird static neben self und parent zum validen Return Type. PHP ist dynamisch typisiert. Es ist anzunehmen, dass sich sowohl für Unions, als auch für static Return Types eine ganze Reihe von Use-Cases finden.

Weak Maps

In PHP 7.4 wurden schwache Referenzen, sogenannte weakrefs hinzugefügt. Darüber können Referenzen zu Objekten hergestellt werden, die den Garbage Collector nicht davon abhalten, diese Objekte zu zerstören. WeakMaps sind quasi die Fortführung dieser Funktionalität.

Von Nutzen ist das zum Beispiel im Fall von ORM, wo aus Performanzgründen oft Caches implementiert werden, die Entitätsklassen referenzieren. Solange ein Cache ein solches Objekt referenziert, konnte es vor Version 7.4 nicht vom Garbage Collector aus dem Speicher gelöscht werden, auch dann nicht wenn es ausschließlich vom Cache referenziert wurde. Über schwache Referenzen und Weak Maps lässt sich festlegen, dass solche Objekte gelöscht werden, sobald nur noch der Cache sie referenziert. Im Fall von ORM, wo oft sehr viele Entitäten in einem Request gemanagt werden, bieten Weak Maps eine ressourcenschonende Art des Umgangs mit diesen Objekten.

Syntax-Tweaks

Mit der Uniform Variable Syntax RFC wurden einige Inkonsistenzen in PHPs Variablensyntax ausgebügelt. Für PHP 8 sind weitere Anpassungen angedacht für Fälle, die dabei übersehen wurden.

Seit PHP 5.5 erlaubt die ::class-Synax das Fetchen von Klassennamen als Strings. Die syntaktische Ähnlichkeit führte wohl vorher verbreitet zu der Annahme, dass  auch $object::class funktioniert. Um den Namen der Klasse eines Objektes zu fetchen, braucht es allerdings bislang folgende Syntax: get_class($object). In V8 soll  derartiger Code

$foo = new Foo();
var_dump($foo::class);

künftig dasselbe bewirken.

Sonstige Neuerungen

In Version 8 wird es euch möglich sein, DateTime und DateTimeImmutable-Objekte jeweils ineinander zu konvertierten. Außerdem neu: Die fdiv-Function, die das teilen durch 0 ermöglicht. Anstelle einer Fehlermeldung bekommt ihr in V8 fallabhängig INF, -INF, oder NAN zurück. Auf Wunsch und dank der Mitarbeit der PHP-Community werden in PHP 8 korrekte Typenannotationen für interne Funktionen und Methoden hinzugefügt. Und: Auch für interne Funktionen werden in Version 8 zukünftig TypeErrors anstelle von null und einer Warnung  ausgegeben. Zudem werden eine ganze Reihe weiterer Warnungen zu konkreten Fehlermeldungen konvertiert. Alle sonstigen Neuerungen und was im Detail dahinter steckt, könnt ihr entweder in Rooses Blogpost oder in den einzelnen RFC nachlesen.

Achtung: Bei Version 8 handelt es sich um ein Major Release. Das impliziert nicht abwärtskompatible Änderungen. Wer allerdings kontinuierlich auf die aktuellste Version aktualisiert hat, dürfte damit eher weniger Probleme haben – die meisten davon wurden wohl schon in vorherigen Versionen deprecated.

Passend dazu: 

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Schreib den ersten Kommentar!

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!

Hey du! Schön, dass du hier bist. 😊

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team bestehend aus 65 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Danke für deine Unterstützung.

Digitales High Five,
Stephan Dörner (Chefredakteur t3n.de) & das gesamte t3n-Team

Anleitung zur Deaktivierung