Disponibile il linguaggio di programmazione Perl 5.36.0

Dopo un anno di sviluppo è stato pubblicato il rilascio di un nuovo ramo stabile del linguaggio di programmazione Perl, la 5.36. Durante la preparazione della nuova versione, sono state modificate circa 250mila righe di codice, le modifiche hanno interessato 2000 file, allo sviluppo hanno preso parte 82 sviluppatori.

Il branch 5.36 viene rilasciato secondo il programma di sviluppo fisso approvato nove anni fa, che prevede il rilascio di nuovi branch stabili una volta all'anno e rilasci correttivi ogni tre mesi. Il rilascio della prima versione correttiva di Perl 5.36.1 è previsto tra circa un mese, risolvendo i bug più significativi identificati durante l'implementazione di Perl 5.36.0. Con il rilascio di Perl 5.36 è stato abbandonato il supporto per il ramo 5.32, che potrà essere aggiornato solo in futuro se vengono identificati problemi critici di sicurezza. È iniziato anche il processo di sviluppo del ramo sperimentale 5.37, dal quale si formerà la release stabile di Perl 2023 a maggio o giugno 5.38, a meno che non si decida di passare alla numerazione 7.x.

Modifiche principali:

  • Il supporto per le firme delle funzioni è stato stabilizzato ed è ora disponibile quando si specifica il pragma "usa v5.36", che consente di definire esplicitamente l'elenco delle variabili utilizzate nella funzione e automatizzare le operazioni di controllo e assegnazione di valori dall'array dei parametri di input. Ad esempio, il codice utilizzato in precedenza: sub foo { die "Troppi argomenti per la subroutine" less @_ >= 2; die "Troppi pochi argomenti per la subroutine" a meno che @_ <= 2; my($sinistra, $destra) = @_; return $sinistra + $destra; }

    quando si utilizzano le firme, può essere sostituito da:

    sub foo ($sinistra, $destra) { return $sinistra + $destra; }

    Chiamare foo con più di due argomenti farà sì che l'interprete generi un errore. L'elenco supporta anche una variabile speciale "$", che ti consente di ignorare alcuni argomenti, ad esempio "sub foo ($left, $, $right)" ti consentirà di copiare solo il primo e il terzo argomento nella variabili, mentre esattamente tre argomenti.

    La sintassi della firma consente inoltre di specificare argomenti opzionali e impostare valori predefiniti se manca un argomento. Ad esempio, specificando "sub foo ($left, $right = 0)", il secondo argomento diventa facoltativo e, se è assente, viene passato il valore 0. Nell'operazione di assegnazione è possibile specificare un'espressione arbitraria, incluso l'utilizzo altre variabili dall'elenco o variabili globali. Specificare un hash o un array invece di una variabile (ad esempio, "sub foo ($left, @right)") comporterà la possibilità di passare uno o più argomenti.

  • Nelle funzioni dichiarate utilizzando le firme, il supporto per l'assegnazione aggiuntiva di parametri dall'array "@_" è dichiarato sperimentale e genererà un avviso (un avviso viene emesso solo se @_ viene utilizzato nelle funzioni dichiarate utilizzando la nuova sintassi). Ad esempio, verrà emesso un avviso per la funzione: use v5.36; sub f ($x, $y = 123) { say "Il primo argomento è $_[0]"; }
  • Stabilizzato e disponibile quando si specifica il pragma "usa v5.36", l'operatore infisso "isa" per verificare se un oggetto è un'istanza della classe specificata o una classe derivata da essa. Ad esempio: if( $obj isa Pacchetto::Nome ) { … }
  • Quando si specifica il pragma "usa v5.36", l'elaborazione degli avvisi è abilitata (è attivata la modalità "usa avvisi").
  • Quando si specifica il pragma "use v5.36", il supporto per la notazione indiretta degli oggetti chiamanti ("feature indirect") è disabilitato - un modo obsoleto di chiamare oggetti, in cui viene utilizzato uno spazio invece di "->" ("metodo $ object @param" invece di "$object-> $method(@param)"). Ad esempio, invece di "my $cgi = new CGI" dovresti usare "my $cgi = CGI->new".
  • Quando si specificava il pragma "use v5.36", il supporto per l'emulazione di array multidimensionali e hash in stile Perl 4 ("funzione multidimensionale") era disabilitato, consentendo a più chiavi di essere tradotte in un array intermedio (ad esempio, "$hash{1 , 2}") è stato convertito in "$hash{join($;, 1, 2)}").
  • Il pragma "use v5.36" disabilita il supporto per un meccanismo di ramificazione sperimentale ("cambio di funzionalità") simile alle istruzioni switch e case (Perl usa le parole chiave date e quando). A partire da Perl 5.36, dovete specificare esplicitamente 'use feature "switch"' per usare questa funzione, e specificando "use version" non la abiliterà più automaticamente.
  • Supporto stabilizzato e disponibile per impostazione predefinita per classi di caratteri aggiuntive tra parentesi quadre all'interno delle espressioni regolari. La funzionalità consente la corrispondenza utilizzando regole estese per intersecare, escludere e concatenare più caratteri. Ad esempio, "[AZ - W]" sono i caratteri dalla A alla Z esclusa la W.
  • Il supporto per le operazioni "(?", "( )", "{ }" e "[ ]" è parzialmente stabilizzato e disponibile per impostazione predefinita. È possibile utilizzare i caratteri "" "", "" "", ecc. Ad esempio, “qr“ "".
  • È vietato chiamare la funzione di ordinamento senza argomenti, il che porterà ora a un output di errore. @a = ordina @vuoto; # continua @a = ordina; # genererà un errore @a = sort (); # verrà generato un errore
  • È stato proposto un nuovo flag della riga di comando "-g", che abilita la modalità di download dell'intero file, anziché riga per riga. Il flag ha lo stesso effetto di "-0777".
  • Il supporto per la specifica Unicode è stato aggiornato alla versione 14.0.
  • Viene fornita una gestione istantanea delle eccezioni in virgola mobile (SIGFPE) simile ad altri allarmi come SIGSEGV, consentendo di collegare gestori personalizzati al segnale SIGFPE tramite $SIG{FPE}, ad esempio emettendo il numero di riga in cui si è verificato il problema.
  • Versioni aggiornate dei moduli inclusi nella distribuzione base.
  • Aggiunte ottimizzazioni delle prestazioni. Viene fornita la possibilità di archiviare chiavi hash di grandi dimensioni in modo più efficiente, senza l'uso di tabelle di stringhe condivise. Le prestazioni nella creazione di nuovi valori scalari sono state notevolmente migliorate, ad esempio il seguente codice è ora più veloce del 30%: $str = "A" x 64; for (0..1_000_000) { @svs = diviso //, $str }
  • Il codice dell'interprete ha iniziato a utilizzare alcuni dei costrutti definiti nello standard C99. La creazione di Perl ora richiede un compilatore che supporti C99. Il supporto dell'assembly è stato eliminato nelle versioni precedenti di MSVC++ (prima di VC12). Aggiunto il supporto per l'assembly in Microsoft Visual Studio 2022 (MSVC++ 14.3).
  • Il supporto per le piattaforme AT&T UWIN, DOS/DJGPP e Novell NetWare è stato interrotto.

Fonte: opennet.ru

Aggiungi un commento