Il linguaggio di programmazione Perl 5.40.0 è disponibile.

Dopo 11 mesi di sviluppo, è stata pubblicata la nuova versione stabile del linguaggio di programmazione Perl — 5.40. Per la preparazione di questo rilascio, sono state modificate circa 160.000 righe di codice (escluse la documentazione e il codice generato automaticamente — 110.000), e le modifiche hanno interessato 1.500 file, con la partecipazione di 75 sviluppatori.

La versione 5.40 è stata rilasciata secondo il programma di sviluppo fisso approvato undici anni fa, che prevede il rilascio di nuove versioni stabili una volta all'anno e aggiornamenti correttivi ogni tre mesi. Circa un mese dopo, si prevede di rilasciare il primo aggiornamento correttivo Perl 5.40.1, che correggerà gli errori più significativi riscontrati durante l'implementazione di Perl 5.40.0. Contemporaneamente al rilascio di Perl 5.40, è stato terminato il supporto per la versione 5.36, per la quale aggiornamenti possono essere rilasciati in futuro solo in caso di problemi critici di sicurezza. Il 20 giugno inizierà il processo di sviluppo della versione sperimentale 5.41, sulla quale verrà formato un rilascio stabile di Perl 5.42 a maggio o giugno 2025, a meno che non si decida di passare alla numerazione 7.x.

Principali modifiche:

  • Sono state estese le funzionalità legate alla nuova sintassi sperimentale per la creazione di classi nell'ultima versione. È stata aggiunta una nuova parola chiave «__CLASS__», che, quando viene invocata da metodi, blocchi ADJUST o durante l'inizializzazione dei campi, restituisce il nome della classe corrente, analogamente a come la parola chiave __PACKAGE__ restituisce il nome del pacchetto. A differenza dell'espressione ref($self), la parola chiave __CLASS__ può essere utilizzata durante l'inizializzazione dei campi per accedere ai metodi della classe nella fase precedente al completamento della creazione di un'istanza della classe. Per la classe base, il valore di __CLASS__ è identico al valore di __PACKAGE__, ma differirà nella creazione di sottoclassi.

    use feature 'class';
    class Example1 {
    field $f = __CLASS__->default_f;
    sub default_f { 10 }
    }

  • Per i campi definiti all'interno della classe, è stato implementato l'attributo «:reader», utilizzato per creare automaticamente un metodo che restituisce il valore della variabile dal campo nell'istanza corrente della classe.
    Ad esempio, specificare «:reader» dopo la definizione del campo «field $s;» è equivalente a creare il metodo «method s () { return $s; }». Se necessario, è possibile definire un nome metodo diverso utilizzando la sintassi «field $name :reader(get_name);».
  • È stato introdotto un nuovo e stabile syntax per la gestione delle eccezioni con try/catch, da utilizzare al posto di operazioni non intuitive su "eval". Il blocco "try" contiene il codice da eseguire, mentre il blocco "catch" include il codice per gestire eventuali eccezioni che possono sorgere durante l'esecuzione del primo blocco. Nel "catch" viene definita una variabile che contiene i dati passati al momento della generazione dell'eccezione (ad esempio, se viene attivata l'eccezione chiamando "die", viene passata la stringa specificata come argomento). All'interno dei blocchi "try" e "catch" sono consentiti operatori di salto, compresi return, goto, next, last e redo.

    try {
    my $x = call_a_function();
    $x < 100 or die "Troppo grande"; send_output($x); } catch ($e) { warn "Impossibile restituire un valore; $e"; } print "Fatto\n";

  • È stato stabilizzato il syntax "for my (VAR, VAR) (LIST)" e "foreach my (VAR, VAR) (LIST)", utilizzato per iterare su liste estraendo più valori in una sola iterazione del ciclo. Ad esempio, ora è possibile specificare:

    foreach my ($key, $value) (%hash) { … }
    for my ($left, $right, $gripping) (@moties) { … }

  • È stato dichiarato stabile il modulo builtin, che include funzioni sempre disponibili integrate nell'interprete. Attualmente, il modulo offre le funzioni true, false, weaken, unweaken, is_weak, blessed, refaddr, reftype, ceil, floor, is_tainted, trim e indexed.
  • Sono state aggiunte nuove funzioni integrate sperimentali inf e nan, disponibili nello spazio dei nomi "builtin::" ("builtin::inf" e "builtin::nan"). Queste funzioni possono essere utilizzate come costanti che definiscono l'infinito e valori non numerici.
  • È stato aggiunto un nuovo operatore logico "^^", corrispondente all'operazione XOR e che integra l'operatore bitwise "^" (in Perl sono forniti tre operatori bitwise di base "&", "|" e "^", che corrispondono alle operazioni AND, OR e XOR, mentre per le operazioni logiche fino ad ora erano disponibili solo le varianti AND ("&&") e OR ("||")). L'espressione logica "$x ^^ $y" restituirà TRUE quando "x" o "y" hanno valore TRUE, ma non entrambe contemporaneamente.
  • Il supporto per la simulazione delle versioni fino a 5.11 è stato interrotto. L'utilizzo della direttiva 'use numero_versione', che disabilita funzionalità aggiuntive introdotte nell'interprete dopo la versione specificata, con un numero di versione inferiore a 5.11 (ad esempio, 'use v5.8') ora genererà un errore invece di un avviso. Analogamente, è stato aggiunto un avviso quando si utilizza 'use' con versioni inferiori a 5.39 (gli avvisi saranno sostituiti da errori nella versione 5.44).
  • È consentito utilizzare uno spazio tra l'opzione della riga di comando '-M' e il nome del modulo, ad esempio 'perl -M Data::Dumper=Dumper -E ‘say Dumper [1,2,3]' (in precedenza era necessario scrivere 'perl -MData::Dumper…').
  • L'uso dell'operatore 'goto' per passare dall'ambito esterno a quello interno è stato dichiarato obsoleto. Il supporto per questa funzionalità sarà interrotto nella versione Perl 5.42.
  • I moduli Term::Table e Test2::Suite, destinati alla creazione di unit test, sono stati inclusi nel core. Sono state aggiornate le versioni dei moduli Archive::Tar, Compress::Raw::Bzip2, Compress::Raw::Zlib, Data::Dumper,
    DB_File, File::Compare, File::Find, Getopt::Long, Hash::Util, HTTP::Tiny, IO, Math::BigInt, PerlIO::encoding, Tie::File, Time::HiRes, e così via.
  • È stato aggiunto il supporto per il sistema operativo Serenity OS.
  • Due vulnerabilità sono state risolte:
    • CVE-2023-47038 — overflow buffer error when processing invalid user-defined Unicode properties. This issue may lead to a buffer overflow of 1 byte when handling specifically crafted regular expressions.
    • CVE-2023-47039 — potential to replace an executable file on Windows due to the search for cmd.exe in paths using the PATH environment variable, where the current working directory is prioritized over the system directory containing the cmd.exe executable.

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster