Der wöchentliche Internals-Rückblick vom 9. September 2026 beginnt mit drei Korrekturen: PHP 8.4.25 war ein Bugfix-Release, kein Security-Release; die ungenannten libxml-rs-Mitwirkenden waren James Gilliland und David Carlier; und Tim Düsterhus widersprach Sjoerd in der Sache, anders als letzte Woche behauptet.

Top-Thema ist eine Abstimmung, die 56 Stunden dauerte. Osama Aldemeery eröffnete am Freitag die Abstimmung über PREG_THROW_ON_ERROR, ein Opt-in-Flag, das PCRE-Fehler in eine PregException verwandelt. Tim Düsterhus, Autor der Throwables-Policy von PHP, stimmte binnen einer Stunde mit Nein. Seine Gründe: Ein Pattern, das nicht kompiliert, behielte seine Warning, während die Exception nur den dünnen preg_last_error_msg-Text trüge, und eine Exception im eigenen preg_replace_callback-Callback würde unverpackt durchgereicht, wobei die Policy verlangt, dass eine Extension verpackt, was sie aufruft. Osama konterte, ein verpackter Callback erzeuge eine PregException ohne zugehörigen preg-Fehler, während preg_last_error() nichts meldet. Die Lösung erfordert eine dreistufige Klassenhierarchie. Robert Humphries argumentierte, ungültige Patterns und fehlerhaftes UTF-8 seien Programmierfehler, also wohl PregError. Osama zog die Abstimmung am Sonntagabend zurück: Das Flag verletze die Throwable-Policy, und das lasse sich nicht bei laufender Abstimmung korrigieren.

Gina P. Banyard will, dass PHP eine Klasse von Engine-Crashes nicht mehr fixt, die nur Fuzzer und LLMs auslösen: Use-after-free-Meldungen, bei denen ein Error-Handler genau die Variable freigibt, die die Warning ausgelöst hat. Jeder Fix koste einen Refcount-Tanz, den alle mit Performance bezahlen, und die meisten Auslöser seien Deprecations, die PHP 9 ohnehin entfernt. Sie fordert Konsens, idealerweise ohne RFC, dass Callbacks, die den Engine-State verändern, undefiniertes Verhalten sind. Ilia Alshanetsky will fallweise fixen. Ilija Tovilo sagt, das sei bereits versucht worden; er verwies auf die Belastung des Security-Teams durch Falschmeldungen und kündigte mit Arnaud einen abmildernden RFC an. Tim Düsterhus merkte an, PHP 9 bringe eigene neue Deprecations.

Zu PEAR: Chuck Burgess von der PEAR Group hat nach Monaten geantwortet und stimmt dem Ziel zu, die Website stillzulegen und PEAR aus dem PHP-Quelltext zu entfernen. Nick S. will die RFC-Zeile über nicht reagierende Maintainer streichen; Larry Garfield und Tim Düsterhus nennen das eine Minor Change, sodass die Abstimmung nach einwöchiger Abkühlphase starten kann. Rowan Tommins wies darauf hin, dass Chuck eines von acht PEAR-Group-Mitgliedern ist, seine Zustimmung also eine Stimme, keine Autorität. Die PEAR-Benutzerkonten sind verloren, die fehlenden Bug-Daten nicht wiederherstellbar. Derick Rethans will die Site ein Jahr readonly belassen, dann einen Tarball auf museum.php.net.

Luca Rodenhäuser schloss den Strict-Identifiers-Thread ohne RFC und dankte Claude Pache, Rowan Tommins und Larry Garfield für die Meinungsänderung. Ob Nicht-ASCII-Identifier ein unterstütztes Feature sind, bleibt offen: Das Manual nennt sie einen Unfall, 1.447 Vorkommen in den Top-5.000-Paketen sagen etwas anderes. Er schickt stattdessen einen Dokumentations-PR und lässt ein Angebot stehen: eine Compiler-Warnung bei unsichtbaren Zeichen in Namen, 68 Fälle in einer halben Million Dateien.

Sjoerd Langkempers RFC, der octdec, hexdec, bindec und base_convert bei ungültiger Eingabe werfen lässt, ging nicht wie geplant in die Abstimmung. Er fragte, welche Exception die richtige sei. Rowan Tommins: Exception plus eigene Subklasse, nie SPL, etwa BaseConversionException. Tim Düsterhus würde schlichte Exception werfen, da die Funktionen in standard liegen und später vielleicht in einen int- oder number-Namespace wandern.

Die Performance-Debatte geht weiter. Larry Garfield hält Benchmarks für einen Datenpunkt unter vielen: 50 Prozent schneller in C ist etwas anderes als 0,5 Prozent. Tim Düsterhus konterte, Performance sei eine Eigenschaft der Implementierung, nicht des Features, und verwies auf den Optimizer, der in PHP 8.6 bereits array_map umschreibt. Sepehr Mahmoudis Scan der Top-200-Composer-Pakete (etwa 21.000 Dateien) fand 32 Substring-Filter-Muster; Rowans Prüfung strich mindestens 15, der RFC sagt nun bis zu 17 von 32, Benchmark angekündigt.

Kurzmeldungen: Weilin Du will die Abstimmung zu IntlRelativeDateTimeFormatter am 15. September eröffnen und behebt Tims Einwand zum intern geklonten ICU-Number-Formatter, indem er ihn künftig erst bei Bedarf vor jedem Formatierungsaufruf neu lädt. Timo Poppinga will in openssl das Provider-Modell von OpenSSL generisch abbilden, damit Post-Quantum-Algorithmen wie ML-KEM und ML-DSA ohne Konstante pro Algorithmus funktionieren. Dmytro Kulyk beantwortete Nicolas Grekas' zehn Monate altes Review des NoSerialize-Attributs; der RFC migriert nun 107 interne Klassen. Florent Morselli fordert, der Strict-Mode des Data-Encoding-RFCs solle Whitespace und nicht-kanonische Endbits ablehnen, denn eine WebAuthn-Credential hat derzeit 16 gültige Schreibweisen. Zum vierten Mal in Folge befindet sich nichts in der Voting-Phase.