Nach einem Jahr Entwicklung wurde die neue stabile Version der Programmiersprache Perl - 5.44 veröffentlicht. Bei der Vorbereitung des neuen Releases wurden etwa 270.000 Codezeilen geändert (ohne Dokumentation und automatisiert generierten Code - 110.000), die Änderungen betrafen 860 Dateien, an der Entwicklung waren 71 Entwickler beteiligt.
Die Version 5.44 wurde gemäß dem vor 13 Jahren genehmigten festen Entwicklungszeitplan veröffentlicht, der vorsieht, dass neue stabile Versionen jährlich und kleinere Updates alle drei Monate erscheinen. Etwa einen Monat später ist die Veröffentlichung des ersten Korrektur-Release Perl 5.44.1 geplant, in dem die wichtigsten Fehler, die während der Einführung von Perl 5.44.0 entdeckt wurden, behoben werden. Mit der Veröffentlichung von Perl 5.44 wurde die Unterstützung für die Version 5.40 eingestellt, für die Updates in Zukunft nur bei kritischen Sicherheitsproblemen veröffentlicht werden können. Der Prozess zur Entwicklung der experimentellen Version 5.45 hat begonnen, auf deren Basis in der ersten Hälfte des Jahres 2027 eine stabile Version von Perl 5.46 erstellt wird, sofern nicht beschlossen wird, zur Nummerierung 7.x überzugehen.
Wichtige Änderungen:
- Eine experimentelle Funktion zur Verwendung von benannten Parametern in Funktionssignaturen wurde hinzugefügt. Diese Funktion ermöglicht es, die Variablen, die an die Funktion übergeben werden, nicht im Funktionskörper, sondern bei deren Definition zu spezifizieren. Die neue Funktionalität erlaubt es, Parameter in beliebiger Reihenfolge mit Schlüssel-/Wert-Paaren und der Syntax zu übergeben, die bei der Zuordnung von Elementen in Hashes verwendet wird: Alter Syntax: sub f { my ($x, $y) = @_; …} f(1, 2); Signaturen: sub f ($x, $y) { … } f(1, 2); Signaturen mit benannten Parametern: sub f (:$x, :$y) { … } f(y => 2, x => 1);
- Eine experimentelle Funktion zum Einsatz von Aliasen (Zeigern auf Zeiger) in foreach-Schleifen mit mehreren Variablen wurde hinzugefügt. Diese Funktionalität erlaubt es, innerhalb einer foreach-Schleife Aliase zu erstellen, während gleichzeitig mehrere Werte in einer einzigen Iteration abgerufen werden. Zum Beispiel kann ein Alias für ein Element eines Hashs mit einem Array während der Iteration über die Schlüssel und Werte des Hashs gebildet werden: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, \@items ) ( %hash ) { say "Das Array $key enthält: @items"; } # Vor Version 5.44 wäre eine Dereferenzierung erforderlich gewesen: foreach my ( $key, $var ) ( %hash ) { say "Das Array $key enthält: @$var"; } # Ohne die experimentellen Funktionen refaliasing und declared_refs: foreach my $key (keys %hash) { say "Das Array $key enthält: @{$hash{$key}}"; }
- In regulären Ausdrücken wurde ein experimenteller Modus 'enhanced_xx' implementiert, der den Modifikator '/xx' mit Zeichensatz-Klassen in eckigen Klammern ([a-zA-Z]) zur Aufteilung auf mehrere Zeilen oder zur Einfügung von Kommentaren ermöglicht. Zum Beispiel kann die Bedingung „if ($text =~ m/[a-zA-Z]/){“ wie folgt formatiert werden: if ($text =~ m/[ a-z # Kleinbuchstaben A-Z # Großbuchstaben ]/xx) {
- Im Zufallszahlengenerator wird der Systemaufruf getentropy() verwendet, um Entropie auf unterstützten Systemen abzurufen (Linux, BSD, macOS). Auf anderen Systemen erfolgt die Entropiegewinne durch das Lesen aus dem Gerät /dev/urandom oder durch die Verwendung eines Hashs, der aus der Zeit, der Prozess-ID und dem Zeigerwert erstellt wurde.
- Unterstützung für die Unicode-Spezifikation 17.0 hinzugefügt.
- Die strikte Einhaltung der Unicode-Regeln für Bezeichnernamen und Gruppen von regulären Ausdrücken wurde gewährleistet. Nun ist es verboten, circa 160 Unicode-Zeichen zu verwenden, die zuvor unter die Klasse „\w“ fielen. Zum Beispiel wurden lateinische Buchstaben in Kreisen, die echten Buchstaben ähneln, aus der Klasse „\w“, die alle Buchstaben, Ziffern und das Unterstrich-Zeichen umfasst, ausgeschlossen. Diese Verhaltensänderung betrifft nur Programme, die den Modus „use utf8“ verwenden.
- Sicherheitsanfälligkeiten, die durch Pufferüberläufe in den Funktionen Perl_study_chunk (CVE-2026-8376, tritt in 32-Bit-Bauten auf) und S_measure_struct (CVE-2026-57432) verursacht wurden, sowie einen Überlauf des 16-Bit-Zählers im Regex-Engine (CVE-2026-13221), der zu falschen Auslösungen von regulären Ausdrücken führen kann, wurden behoben.
- Die Verwendung des goto-Befehls an Positionen innerhalb von Schleifen und Blockstrukturen ist nicht mehr erlaubt. Diese Möglichkeit wurde 2010 als veraltet erklärt.
- Leistungsoptimierungen wurden durchgeführt, die die Vorgänge von Addition, Subtraktion und Multiplikation mit Ganzzahlen, die Verarbeitung von Funktionssignaturen sowie das Befüllen von Hashes aus Schlüssel/Wert-Listen mit zur Compile-Zeit bekannten String-Schlüsseln beschleunigen.
Quelle: opennet.ru
