Nach einem Jahr der Entwicklung wurde die neue stabile Version der Programmiersprache Perl – 5.36 veröffentlicht. Bei der Vorbereitung dieser neuen Ausgabe wurden etwa 250.000 Codezeilen geändert, betroffen waren 2.000 Dateien, und 82 Entwickler waren an der Entwicklung beteiligt.
Die Version 5.36 wurde gemäß dem vor neun Jahren festgelegten Zeitplan veröffentlicht, der die jährliche Veröffentlichung neuer stabiler Versionen und vierteljährliche Updates vorsieht. In etwa einem Monat wird das erste Update Perl 5.36.1 veröffentlicht, in dem die bedeutendsten Fehler behoben werden sollen, die während der Einführung von Perl 5.36.0 entdeckt wurden. Mit der Veröffentlichung von Perl 5.36 wurde die Unterstützung für die Version 5.32 eingestellt; zukünftige Updates werden nur im Falle kritischer Sicherheitsprobleme bereitgestellt. Gleichzeitig hat der Entwicklungsprozess für die experimentelle Version 5.37 begonnen, auf deren Basis im Mai oder Juni 2023 eine stabile Version von Perl 5.38 erstellt wird, es sei denn, es wird beschlossen, zur Versionsnummerierung 7.x überzugehen.
Wichtige Änderungen:
- Die Unterstützung für Funktionssignaturen, die es ermöglichen, die Liste der in einer Funktion verwendeten Variablen eindeutig zu definieren und die Überprüfung sowie die Zuweisung von Werten aus dem Array der Eingabeparameter zu automatisieren, wurde stabilisiert und steht jetzt zur Verfügung, wenn die Pragmatik „use v5.36“ angegeben wird. Zum Beispiel der zuvor verwendete Code: sub foo { die "Zu viele Argumente für die Unterroutine" unless @_ >= 2; die "Zu wenige Argumente für die Unterroutine" unless @_ <= 2; my($left, $right) = @_; return $left + $right; }
Die Verwendung von Signaturen kann ersetzt werden durch:
sub foo ($left, $right) { return $left + $right; }
Bei Aufruf von foo mit einer anderen Anzahl von Argumenten als zwei wird der Interpreter einen Fehler ausgeben. In der Liste wird auch die spezielle Variable „$“ unterstützt, die es ermöglicht, Teile der Argumente zu ignorieren. Zum Beispiel ermöglicht „sub foo ($left, $, $right)“, dass nur die Werte des ersten und dritten Arguments in die Variablen kopiert werden, dabei müssen genau drei Argumente an die Funktion übergeben werden.
Die Syntax von Signaturen ermöglicht es auch, optionale Argumente anzugeben und Standardwerte festzulegen, die verwendet werden, falls ein Argument fehlt. Wenn Sie beispielsweise «sub foo ($left, $right = 0)» angeben, wird das zweite Argument optional und, falls es nicht angegeben wird, der Wert 0 übergeben. Bei der Zuweisungsoperation kann ein beliebiger Ausdruck angegeben werden, auch unter Verwendung anderer Variablen aus der Liste oder globaler Variablen. Die Angabe anstelle einer Variable einen Hash oder ein Array (z. B. «sub foo ($left, @right)») ermöglicht die Übergabe eines oder mehrerer Argumente.
- In Funktionen, die mit Signaturen deklariert sind, wird die Unterstützung für die zusätzliche Zuweisung von Parametern aus dem Array «@_» als experimentell betrachtet und führt zu einer Warnung (die Warnung wird nur ausgegeben, wenn @_ in Funktionen verwendet wird, die mit der neuen Syntax deklariert wurden). Zum Beispiel wird eine Warnung für die Funktion ausgegeben: use v5.36; sub f ($x, $y = 123) { say «Das erste Argument ist $_[0]»; }
- Stabilisiert und verfügbar mit der Angabe der Pragmatik „use v5.36“. Der Infix-Operator „isa“ dient zur Überprüfung, ob ein Objekt eine Instanz der angegebenen Klasse oder eine abgeleitete Klasse ist. Zum Beispiel: if( $obj isa Package::Name ) { … }
- Bei Angabe der Pragmatik „use v5.36“ wird die Verarbeitung von Warnungen aktiviert (der Modus „use warnings“ ist eingeschaltet).
- Bei Angabe der Pragmatik „use v5.36“ wurde die Unterstützung für die indirekte Objektaufrufnotation („feature indirect“) abgeschaltet – eine veraltete Methode zum Aufruf von Objekten, bei der anstelle von „->“ ein Leerzeichen verwendet wird („method $object @param“ anstelle von „$object->$method(@param)“). Zum Beispiel: Anstelle von „my $cgi = new CGI“ sollte „my $cgi = CGI->new“ verwendet werden.
- Bei Angabe der Pragmatik „use v5.36“ wurde die Unterstützung für die Emulation von mehrdimensionalen Arrays und Hashes im Perl 4-Stil („feature multidimensional“) deaktiviert, die es ermöglicht, mehrere Schlüssel in ein Zwischenspeicher-Array zu übertragen (zum Beispiel wurde „$hash{1, 2}“ in „$hash{join($;, 1, 2)}“ umgewandelt).
- Wenn die Pragmatik „use v5.36“ angegeben ist, wird die Unterstützung für den experimentellen Verzweigungsmechanismus („feature switch“) deaktiviert, ähnlich den switch- und case-Operatoren (in Perl werden die Schlüsselwörter given und when verwendet). Um diese Funktion ab Perl 5.36 nutzen zu können, muss ausdrücklich ‚use feature „switch“‘ angegeben werden; beim Angabe von „use version“ wird sie nicht mehr automatisch aktiviert.
- Die Unterstützung zusätzlicher Zeichengruppen in eckigen Klammern innerhalb von regulären Ausdrücken ist stabilisiert und standardmäßig verfügbar. Diese Möglichkeit ermöglicht die Abgleichung unter Verwendung erweiteter Regeln für Schnittmengen, Ausschlüsse und Vereinigungen von Zeichensätzen. Beispielsweise repräsentiert ‚[A-Z — W]‘ die Zeichen von A bis Z, mit Ausnahme von W.
- Die Unterstützung der Operationen „(?“, „( )“, „{ }“ und „[ ]“ ist teilweise stabilisiert und standardmäßig verfügbar; es können die Zeichen „« »“, „“ ”“ usw. verwendet werden. Zum Beispiel „qr«pat»“.
- Der Aufruf der Funktion sort ohne Argumente ist verboten, was jetzt zu einer Fehlerausgabe führen wird. @a = sort @empty; # funktioniert weiterhin @a = sort; # es wird ein Fehler ausgegeben @a = sort (); # es wird ein Fehler ausgegeben
- Ein neuer Befehlszeilen-Parameter „-g“ wurde eingeführt, der den Modus zur vollständigen Dateiladung anstelle der zeilenweisen Verarbeitung aktiviert. Das Verhalten des Parameters entspricht dem der Angabe „-0777“.
- Die Unterstützung der Unicode-Spezifikation wurde auf Version 14.0 aktualisiert.
- Es wurde eine sofortige Behandlung von Ausnahmen im Zusammenhang mit Berechnungen mit Fließkommazahlen (SIGFPE) implementiert, die ähnlich wie bei anderen Abbruchsignalen wie SIGSEGV behandelt werden. Dies ermöglicht die Bindung eigener Handler für das SIGFPE-Signal über $SIG{FPE}, beispielsweise zur Ausgabe der Zeilennummer, in der das Problem aufgetreten ist.
- Die Versionen der in der Grundausstattung enthaltenen Module wurden aktualisiert.
- Leistungsoptimierungen wurden hinzugefügt. Es besteht die Möglichkeit, Schlüssel großer Hashes effizienter zu speichern, ohne geteilte Zeilentabellen zu verwenden. Die Leistung bei der Erstellung neuer skalarer Werte wurde erheblich verbessert; beispielsweise wird der folgende Code nun 30 % schneller ausgeführt: $str = „A“ x 64; for (0..1_000_000) { @svs = split //, $str }
- Im Code des Interpreters wurde die Verwendung bestimmter Konstrukte eingeführt, die im C99-Standard definiert sind. Für die Erstellung von Perl wird jetzt ein Compiler benötigt, der C99 unterstützt. Die Unterstützung für alte Versionen von MSVC++ (bis VC12) wurde eingestellt. Die Unterstützung für die Microsoft Visual Studio 2022 (MSVC++ 14.3) wurde hinzugefügt.
- Die Unterstützung für die Plattformen AT&T UWIN, DOS/DJGPP und Novell NetWare wurde eingestellt.
Quelle: opennet.ru
