Perl 5.36.0 programmeringsspråk tillgängligt

Efter ett års utveckling har lanseringen av en ny stabil gren av programmeringsspråket Perl - 5.36 - publicerats. Vid förberedelserna av den nya versionen ändrades cirka 250 tusen rader kod, ändringarna påverkade 2000 filer och 82 utvecklare deltog i utvecklingen.

Branch 5.36 släpptes i enlighet med det fasta utvecklingsschema som godkändes för nio år sedan, vilket innebär att nya stabila grenar släpps en gång per år och korrigerande släpp var tredje månad. Om ungefär en månad är det planerat att släppa den första korrigerande versionen av Perl 5.36.1, som kommer att korrigera de mest betydande felen som identifierats under implementeringen av Perl 5.36.0. Tillsammans med lanseringen av Perl 5.36 avbröts stödet för 5.32-grenen, för vilka framtida uppdateringar endast kan släppas om kritiska säkerhetsproblem identifieras. Processen med att utveckla experimentgrenen 5.37 har också påbörjats, på grundval av vilken en stabil release av Perl 2023 kommer att bildas i maj eller juni 5.38, om inte beslut fattas om att byta till nummer 7.x.

Viktiga ändringar:

  • Stöd för funktionssignaturer har stabiliserats och är nu tillgängligt när du specificerar "use v5.36"-pragman, vilket gör att du explicit kan definiera listan över variabler som används i funktionen och automatisera operationerna för att kontrollera och tilldela värden från en array av inkommande parametrar. Till exempel, tidigare använd kod: sub foo { die "För många argument för subrutin" om inte @_ >= 2; die "För få argument för subrutin" om inte @_ <= 2; my($vänster, $höger) = @_; returnera $vänster + $höger; }

    när du använder signaturer kan den ersättas av:

    sub foo ($left, $right) { return $left + $right; }

    Om du ringer foo med fler än två argument kommer tolken att kasta ett fel. Listan stöder också en speciell variabel "$", som låter dig ignorera några av argumenten, till exempel "sub foo ($left, $, $right)" låter dig kopiera endast de första och tredje argumenten till variabler , medan exakt tre måste skickas till funktionsargumentet.

    Signatursyntaxen låter dig också ange valfria argument och ange standardvärden om ett argument saknas. Till exempel, genom att ange "sub foo ($left, $right = 0)" blir det andra argumentet valfritt och om det saknas skickas värdet 0. I tilldelningsoperationen kan du specificera godtyckliga uttryck, inklusive att använda andra variabler från listan eller globala variabler. Att specificera en hash eller array istället för en variabel (till exempel "sub foo ($left, @right)") tillåter att ett eller flera argument skickas.

  • I funktioner som deklareras med signaturer, deklareras stöd för valfri parametertilldelning från "@_"-matrisen som experimentell och kommer att resultera i en varning (varningen utfärdas endast om @_ används i funktioner som deklareras med den nya syntaxen). Till exempel kommer en varning att visas för funktionen: använd v5.36; sub f ($x, $y = 123) { säg "Det första argumentet är $_[0]"; }
  • Stabiliserad och tillgänglig när man specificerar "use v5.36"-pragman, infixoperatorn "isa" för att kontrollera om ett objekt är en instans av den angivna klassen eller en klass som härrör från den. Till exempel: if( $obj isa Package::Name ) { … }
  • När du anger pragmat för "använd v5.36" aktiveras varningsbehandling (läget "använd varningar" är aktiverat).
  • När man specificerar "use v5.36"-pragman, är stöd för indirekt notation för anropande objekt ("feature indirect") inaktiverat - ett föråldrat sätt att anropa objekt, där ett mellanslag används istället för "->" ("metod $ objekt @param" istället för "$object-> $method(@param)"). Till exempel, istället för "my $cgi = new CGI" måste du använda "my $cgi = CGI->new".
  • När du specificerar "använd v5.36"-pragman inaktiveras stöd för emulering av flerdimensionella arrayer och hash i Perl 4-stilen ("feature multidimensional"), vilket gör att indikeringen av flera nycklar kan översättas till en mellanliggande array (till exempel " $hash{1, 2}”) konverterades till "$hash{join($;, 1, 2)}").
  • När du specificerar "använd v5.36"-pragman inaktiveras stöd för den experimentella förgreningsmekanismen ("funktionsomkopplare"), liknande switch- och fallsatserna (Perl använder de givna och när nyckelorden). För att använda den här funktionen, från och med Perl 5.36, måste du uttryckligen ange 'använd funktionen "switch"', och om du anger "använd version", kommer den inte längre att aktiveras automatiskt.
  • Stöd för ytterligare teckenklasser inom hakparenteser i reguljära uttryck har stabiliserats och är tillgängligt som standard. Funktionen låter dig utföra matchningar med hjälp av avancerade regler för korsning, uteslutning och förening av uppsättningar tecken. Till exempel "[AZ - W]" - tecken från A till Ö exklusive W.
  • Stöd för operationerna "(?", "( )", "{ }" och "[ ]" är delvis stabiliserat och tillgängligt som standard; du kan använda symbolerna "" "", "" "", etc. Till exempel. , "qr" klappa "".
  • Det är förbjudet att anropa sorteringsfunktionen utan argument, vilket nu kommer att resultera i ett fel. @a = sortera @tom; # kommer att fortsätta @a = sortera; # ett fel kommer att skrivas ut @a = sort(); # ett fel kommer att skrivas ut
  • En ny kommandoradsflagga "-g" har föreslagits, som möjliggör läget för att ladda hela filen som helhet, snarare än rad för rad. Flaggans verkan liknar indikationen "-0777".
  • Stödet för Unicode-specifikationen har uppdaterats till version 14.0.
  • Ger omedelbar hantering av flyttalsundantag (SIGFPE) liknande andra larm såsom SIGSEGV, vilket gör att du kan binda dina egna hanterare för SIGFPE via $SIG{FPE}, till exempel att mata ut radnumret där problemet uppstod.
  • Uppdaterade versioner av moduler som ingår i grundpaketet.
  • Lade till prestandaoptimeringar. Möjligheten att lagra stora hash-nycklar mer effektivt utan att använda delade strängtabeller har tillhandahållits. Prestanda för att skapa nya skalära värden har förbättrats avsevärt, till exempel går följande kod nu 30% snabbare: $str = "A" x 64; för (0..1_000_000) { @svs = split //, $str }
  • Tolkkoden började använda några av de konstruktioner som definieras i C99-standarden. Att bygga Perl kräver nu en kompilator som stöder C99. Stöd för att bygga in äldre versioner av MSVC++ (pre-VC12) har upphört. Lagt till stöd för att bygga i Microsoft Visual Studio 2022 (MSVC++ 14.3).
  • Stödet för AT&T UWIN, DOS/DJGPP och Novell NetWare-plattformar har upphört.

Källa: opennet.ru

Lägg en kommentar