Gestern, 23. Mai, wurde Perl 5.30.0 veröffentlicht. Die Nachricht wurde vom perl.perl5.porters Usenet als einer der wichtigsten Entwickler von Perl, Sawyer X, bekannt gegeben.
Verglichen mit der vorherigen stabilen Version 5.28.0, die vor ungefähr 11 Monaten veröffentlicht wurde, wurden ungefähr 620.000 Codezeilen geändert, die Änderungen betrafen 1300 Dateien, 58 Autoren waren an der Entwicklung beteiligt. Änderungen am Quellcode selbst (nur .pm-, .t-, .c- und .h-Dateien) werden auf ~ 510.000 Zeilen und 750 Dateien geschätzt.
Die Entwicklung des nächsten Zweigs 5.31 ist offen. Die nächste stabile Version ist für Mai 2020 geplant.
Wichtige Änderungen:
- Die Perl API C-Funktionen sv_utf8_downgrade und sv_utf8_decode gelten nicht mehr als experimentell.
- Implementierte experimentelle Unterstützung für Lookbehind-Ausdrücke variabler Länge, wie zum Beispiel "(? <= Foo?)" Und "(? <! Ba {1,9} r)" (zuvor zu einem Fehler geführt)
- Der Maximalwert des Größenbezeichners ("n") in den Blöcken "{m, n}" regulärer Ausdrücke wurde von 32767 auf 65534 erhöht.
- Unterstützung für Unicode 12.1.
- Den Unicode-Eigenschaftswertspezifikationen wurde eine eingeschränkte Unterstützung für Platzhalter hinzugefügt (ich weiß nicht, wie ich richtig übersetzen soll). Zum Beispiel der Ausdruck "qr! \ P {nv = / (? X) \ A [0-5] \ z /}!" Ermöglicht die Auswahl aller Unicode-Zeichen, die Zahlen von 0 bis 5 definieren, einschließlich thailändischer oder bengalischer Ziffern.
- Die Unterstützung für qr '\ N {name}' wurde implementiert (benannte Zeichen in regulären Ausdrücken, die auf einfache Anführungszeichen beschränkt sind; früher führte ein solcher regulärer Ausdruck zu einem Fehler).
- Jetzt können Sie Perl nur mit threadsicheren Operationen mit Gebietsschemas kompilieren (-Accflags = '- DUSE_THREAD_SAFE_LOCALE').
- Die Kombination der Flags "-Dv" (erweiterte Debugging-Ausgabe) und "-Dr" (Debuggen regulärer Ausdrücke) führt nun zur Einbeziehung aller möglichen Debugging-Modi regulärer Ausdrücke.
- Pack () bietet zusätzlichen Schutz gegen die Rückgabe ungültiger Unicode-Sequenzen.
Entfernen von Funktionen und inkompatible Änderungen:
- Das Zuweisen eines Werts ungleich Null zur speziellen Variablen $ [ (Index des ersten Elements des Arrays) führt nun zu einem schwerwiegenden Fehler.
- Als Trennzeichen von Linien und Mustern sind nur noch Grapheme zulässig. (Unicode-Verbundzeichen sind verboten).
- Einige bisher veraltete Möglichkeiten, die nicht entkappte linke Klammer "{" in Regex-Mustern zu verwenden, sind jetzt verboten.
- Das Aufrufen von sysread (), syswrite (), send () oder recv () während der Verarbeitung des Handles: utf8 ist jetzt ein schwerwiegender Fehler.
- Es ist verboten, "my" in identisch falschen bedingten Anweisungen zu verwenden (z. B. "my $ x if 0").
- Unterstützung für die spezielle Variable $ * (mehrzeilige Suche) entfernt. Die richtigen Alternativen sind "/ s" und "/ m".
- Unterstützung für die spezielle Variable $ # (formatierte Ausgabe von Zahlen) entfernt.
- Der Funktionsname dump () muss jetzt explizit qualifiziert werden (CORE :: dump).
- Die Funktion File :: Glob :: glob wurde entfernt (Sie müssen File :: Glob :: bsd_glob verwenden).
- Es war geplant, die Verwendung von Makros im XS-Code (Blöcke in C), die Operationen mit UTF-8 ausführen, nicht mehr zu unterstützen, aber dann wurde beschlossen, die Version 5.32 zu verschieben.
Leistungsverbesserungen:
- Die Übersetzung von UTF-8 in Codepunkte (ich weiß nicht, wie man übersetzt) ist jetzt als Zustandsmaschine implementiert, was ebenfalls zu einer Leistungssteigerung führt. Beispielsweise erfordert ord ("\ x7fff") jetzt 12% weniger Anweisungen. Die UTF-8-Zeichenfolgenvalidierung wird auch als Zustandsmaschine implementiert und ist schneller.
- Rekursive Aufrufe aus finalize_op () entfernt.
- Der Code wurde geringfügig optimiert, um identische Zeichen zu falten und Zeichenklassen in regulären Ausdrücken zu definieren.
- Die Konvertierung von vorzeichenbehafteten Typkennungen in vorzeichenlose (IV in UV) wurde optimiert.
- Der Algorithmus zum Konvertieren von Ganzzahlen in Zeichenfolgen wird beschleunigt, indem zwei statt einer Stelle gleichzeitig verarbeitet werden.
- Verbessert durch LGTM-Analyse.
- Optimierter Code in den Dateien regcomp.c, regcomp.h und regexec.c.
- Das Abgleichen von regulären Ausdrücken der Form „qr / [^ a] /“ wird in Fällen, in denen „a“ ein ASCII-Zeichen ist, erheblich beschleunigt (Nicht-ASCII-Fälle „a“ können ebenfalls eine Leistungssteigerung aufweisen, jedoch unter bestimmten Bedingungen).