JIT-Compiler, Union-Types und mehr soll PHP 8 bieten

JIT-Compiler, Union-Types und vieles mehr soll PHP 8 bieten

Die Programmiersprache PHP soll ende diesen Jahres (2020) ein Major Update erhalten. Für Version 8 soll ein JIT-Compiler für deutlich mehr Performance, beliebige Union-Types, static Return Types und konsistente Type Errors für vereinfachtes Type-Handling enthalten.

PHP-Entwickler Brent Roose führt auf seinem Blog eine fortlaufende Liste der geplanten und beschlossenen Neuerungen für das nächste Major Release auf. Die neue Version ist momentan „under heavy development“. Bis zum Release (Ende 2020) wird sicherlich noch weitere Änderungen geben. Roose bis dahin den Blogpost regelmäßig updaten.

Der Just-In-Time-Compiler

Der Just-in-Time-Compiler, der für deutlich mehr Performanz sorgen soll – wenn auch wohl eher weniger im Kontext von Web Requests ist einer  der bereits beschlossenen Neuerungen. 

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. Im Klartext heißt das, der Code wird für die CPU in Maschinencode übersetzt. Der JIT-Compiler soll Teile eures PHP-Codes künftig während der Laufzeit kompilieren. Das ist in etwa so, wie eine gecachte Version des interpretierten Codes, die während der Laufzeit erstellt wird. Wie aber soll das funktionieren? Die Funktionalität des JIT Compiler sieht vor, den Code während der Laufzeit zu überwachen. Teile davon, die mit hoher Frequenz wiederholt ausgeführt werden, können dann zu optimiertem Maschinencode kompiliert werden. Das kann dann anstelle des eigentlichen Codes on the fly verwendet werden.

Union Types

Union Types oder Union sind eine Zusammenfassung  zweier oder mehrerer Typen. Über diese wird angezeigt, 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. Dieser referenziert die Klasse auf die eine Methode aufgerufen wird, auch wenn die Methode vererbt ist. static wird neben self  und parent in PHP 8 zum validen Return Type. PHP ist dynamisch typisiert. Anzunehmen ist, dass sich sowohl für Unions, als auch für static Return Types eine ganze Reihe von Use Cases finden werden.

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.

Weak Maps

Weakrefs, schwache Referenzen, wurden in PHP 7.4 hinzugefügt. Darüber können Referenzen zu Objekten hergestellt werden, die den Garbage Collector nicht davon abhalten, diese Objekte zu zerstören. Weak Maps sind im weiteren Sinne die Fortführung dieser Funktionalität.

Im Fall von ORMs, wo aus Performanzgründen oft Caches implementiert werden könenn die Weak Maps von Vorteil sein. Weak Maps  referenzieren hier Entitätsklassen. In PHP 7.4 konnte ein solches Objekt nicht vom Garbage Collector aus dem Speicher gelöscht werden, auch dann nicht wenn es ausschließlich vom Cache referenziert wurde. Bei PHP 8 könnt Ihr über schwache Referenzen und Weak Maps festlegen, dass solche Objekte gelöscht werden, sobald nur noch der Cache sie referenziert. Im Fall von ORMs, wo oft sehr viele Entitäten in einem Request gemanaged werden, bieten Weak Maps eine ressourcenschonende Art des Umgangs mit diesen Objekten.

Mit Material von t3n und Redakteurin Kathrin Stoll

Die neusten Einträge

Fit bleiben im Home-Office

Google AdSense einrichten und mit WordPress verknüpfen

Corona-Quarantäne am Computer sinnvoll nutzen

Unsere Kaufempfehlung:

Schreibe einen Kommentar

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