Perl 5.44


3

După un an de dezvoltare publicat lansarea unei noi ramuri stabile a limbajului de programare Perl — 5.44. La pregătirea noului release au fost modificate aproximativ 270 de mii de linii de cod (fără documentație și cod generat automat — 110 mii), modificările au afectat 860 de fișiere, iar 71 de dezvoltatori au participat la dezvoltare.

Ramura 5.44 a fost lansată conform unui program stabilit acum treisprezece ani, care prevede lansarea de noi ramuri stabile o dată pe an și release-uri corective — o dată la trei luni. Aproape în termen de o lună se preconizează lansarea primului release corectiv Perl 5.44.1, care va corecta cele mai semnificative erori identificate în procesul de implementare a Perl 5.44.0. Odată cu lansarea Perl 5.44, suportul pentru ramura 5.40 a fost întrerupt, iar actualizările pentru aceasta pot fi lansate în viitor doar în cazul în care sunt identificate probleme critice de securitate. A început procesul de dezvoltare a ramurii experimentale 5.45, pe baza căreia în prima jumătate a anului 2027 va fi format un release stabil Perl 5.46, dacă nu se va lua decizia de a trece la numerotarea 7.x.

Principalele modificări:

  • Adăugat o opțiune experimentală de utilizare a parametrilor denumiți în semnături funcțiilor, care definesc lista variabilelor transmise funcției nu în corpul funcției, ci la declarația acesteia. Noua opțiune permite transmiterea parametrilor nu într-o ordine strictă a secvenței, ci într-o ordine arbitrară folosind perechi cheie/valoare și sintaxa similară cu atribuirea elementelor în hash-uri:
    • sintaxa veche: sub f { my ($x, $y) = @_; …} f(1, 2);
    • semnături: sub f ($x, $y) { … } f(1, 2);
    • semnături cu parametri denumiți: sub f (:$x, :$y) { … } f(y => 2, x => 1);
  • A fost adăugată o funcționalitate experimentală care permite utilizarea aliaselor (indicii spre indici) în buclele foreach cu mai multe variabile. Funcționalitatea implementată permite crearea unui alias în bucla foreach prin extragerea simultană a mai multor valori într-o singură iterație. De exemplu, se poate forma un alias pentru un element hash cu un array în timpul iterării simultane a cheilor și valorilor hash-ului: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "Array-ul $key conține: @items"; } # Până la versiunea 5.44, ar fi fost necesară dereferințierea: foreach my ( $key, $var ) ( %hash ) { say "Array-ul $key conține: @$var"; } # Fără funcționalitățile experimentale refaliasing și declared_refs: foreach my $key (keys %hash) { say "Array-ul $key conține: @{$hash{$key}}"; }
  • În expresiile regulate a fost implementat modul experimental ‘enhanced_xx’, care permite utilizarea modificatorului /xx cu clasele de simboluri în paranteze pătrate ([a-zA-Z]) pentru a le separa în mai multe linii sau pentru a adăuga comentarii. De exemplu, condiția if ($text =~ m/[a-zA-Z]/) poate fi formulată astfel: if ($text =~ m/[ a-z # litere mici A-Z # litere mari ]/xx) {
  • În generatorul de numere pseudo-aleatorii, pentru obținerea entropiei se utilizează apelul sistemului getentropy() pe sistemele care îl suportă (Linux, BSD, macOS). Pe celelalte sisteme, pentru obținerea entropiei se face citire din dispozitivul /dev/urandom sau se folosește un hash bazat pe timpul, identificatorul procesului și valoarea pointerului.
  • S-a adăugat suport pentru specificația Unicode 17.0.
  • S-a asigurat respectarea strictă a regulilor Unicode pentru numele identificatorilor și grupurile de expresii regulate, în care acum este interzisă utilizarea a aproximativ 160 de caractere Unicode, care anterior se încadrau în clasa w. De exemplu, din acțiunea clasei w, care acoperă toate literele, cifrele și caracterul de subliniere, au fost excluse literele latine în cercuri, care seamănă cu literele reale, dar nu sunt acestea. Schimbarea comportamentului afectează doar programele care utilizează modul use utf8.
  • S-au eliminat vulnerabilitățile cauzate de overflow-uri de buffer în funcțiile Perl_study_chunk (CVE-2026-8376, care se manifestă în construcțiile de 32 de biți) și S_measure_struct (CVE-2026-57432), precum și overflow-ul unui contor de 16 biți în motorul Regex (CVE-2026-13221), ceea ce poate duce la activarea incorectă a expresiei regulate.
  • Trecerea cu ajutorul operatorului goto la o poziție din interiorul buclelor și construcțiilor de blocuri este interzisă. Această posibilitate a fost declarată învechită în 2010.
  • Au fost efectuate optimizări ale performanței, care au accelerat operațiile de adunare, scădere și înmulțire a numerelor întregi, procesarea semnăturilor funcțiilor și completarea hash-urilor din liste în format cheie/valoare cu chei de tip șir de caractere cunoscute în timpul compilării.

Sursa: linux.org.ru

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster