Dopo un anno di sviluppo pubblicato rilascio del nuovo ramo stabile del linguaggio di programmazione Perl — 5.44. Durante la preparazione del nuovo rilascio sono state modificate circa 270.000 righe di codice (senza documentazione e codice generato automaticamente — 110.000), le modifiche hanno interessato 860 file, con la partecipazione di 71 sviluppatori nella fase di sviluppo.
Il ramo 5.44 è stato rilasciato secondo un programma di sviluppo fissato tredici anni fa, che prevede il rilascio di nuovi rami stabili una volta all'anno e di rilasci correttivi ogni tre mesi. Circa un mese dopo è previsto il rilascio del primo aggiornamento correttivo Perl 5.44.1, in cui verranno corretti i difetti più significativi rilevati durante l'implementazione di Perl 5.44.0. Contestualmente all'uscita di Perl 5.44, è stata interrotta la supporto per il ramo 5.40, per il quale gli aggiornamenti verranno rilasciati in futuro solo in caso vengano rilevati problemi critici di sicurezza. È iniziato il processo di sviluppo del ramo sperimentale 5.45, sulla base del quale nella prima metà del 2027 sarà formata una versione stabile di Perl 5.46, se non verrà presa la decisione di passare alla numerazione 7.x.
Le chiave cambiamenti:
- È stata aggiunta funzionalità sperimentale che consente l'uso di parametri denominati in firma delle funzioni, che definiscono l'elenco delle variabili passate alla funzione non nel corpo della funzione, ma alla sua dichiarazione. La nuova possibilità consente di passare i parametri non in un ordine rigoroso, ma in un ordine arbitrario utilizzando coppie chiave/valore e una sintassi simile a quella di assegnazione degli elementi nelle hash:
- vecchia sintassi: sub f { my ($x, $y) = @_; …} f(1, 2);
- firme: sub f ($x, $y) { … } f(1, 2);
- firme con parametri denominati: sub f (:$x, :$y) { … } f(y => 2, x => 1);
- È stata aggiunta una funzionalità sperimentale per l'uso degli alias (puntatori a puntatori) nei cicli foreach con più variabili. La funzionalità implementata consente di creare un alias nel ciclo foreach estraendo contemporaneamente più valori in un'unica iterazione del ciclo. Ad esempio, puoi formare un alias per un elemento hash con un array durante l'iterazione simultanea delle chiavi e dei valori dell'hash: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "L'array $key contiene: @items"; } # Prima della versione 5.44 sarebbe stato necessario eseguire la dereferenziazione: foreach my ( $key, $var ) ( %hash ) { say "L'array $key contiene: @$var"; } # Senza le funzionalità sperimentali refaliasing e declared_refs: foreach my $key (keys %hash) { say "L'array $key contiene: @{$hash{$key}}"; }
- Nelle espressioni regolari è stato implementato la modalità sperimentale ‘enhanced_xx’, che consente di utilizzare il modificatore /xx con le classi di caratteri tra parentesi quadre ([a-zA-Z]) per la loro suddivisione su più righe o l'inserimento di commenti. Ad esempio, la condizione if ($text =~ m/[a-zA-Z]/){ può essere scritta così: if ($text =~ m/[ a-z # lettere minuscole A-Z # lettere maiuscole ]/xx) {
- Nel generatore di numeri pseudocasuali, per ottenere entropia viene utilizzata la chiamata di sistema getentropy() sui sistemi che lo supportano (Linux, BSD, macOS). Sui restanti sistemi, per ottenere entropia si legge dal dispositivo /dev/urandom o si utilizza un hash basato su tempo, identificatore di processo e valore del puntatore.
- È stato aggiunto il supporto per la specifica Unicode 17.0.
- È stata garantita una rigorosa conformità alle regole Unicode per i nomi degli identificatori e dei gruppi di espressioni regolari, nei quali ora è vietato utilizzare circa 160 simboli Unicode, precedentemente inclusi nella classe w. Ad esempio, le lettere latine in cerchi, che assomigliano a vere lettere ma non lo sono, sono state escluse dall'azione della classe w, che includeva tutte le lettere, i numeri e il carattere di sottolineatura. La modifica del comportamento riguarda solo i programmi che utilizzano la modalità use utf8.
- Sono state eliminate vulnerabilità causate da buffer overflow nelle funzioni Perl_study_chunk (CVE-2026-8376, che si manifesta nelle build a 32 bit) e S_measure_struct (CVE-2026-57432), così come l'overflow di un contatore a 16 bit nel motore Regex (CVE-2026-13221), che può portare a un'esecuzione errata delle espressioni regolari.
- È vietato il passaggio tramite l'operatore goto in posizioni all'interno di cicli e costrutti a blocchi. Questa possibilità è stata dichiarata obsoleta nel 2010.
- Sono state effettuate ottimizzazioni delle prestazioni che hanno accelerato le operazioni di somma, sottrazione e moltiplicazione di numeri interi, l'elaborazione delle firme delle funzioni e il riempimento degli hash da elenchi in formato chiave/valore con chiavi stringa note in fase di compilazione.
Fonte: linux.org.ru
