Dopo 11 mesi di sviluppo rilascio di un nuovo ramo stabile del linguaggio di programmazione Perl — . Durante la preparazione della nuova versione, circa 620.000 righe di codice sono state modificate, coinvolgendo 1300 file, con la partecipazione di 58 sviluppatori.
Il ramo 5.30 è stato rilasciato secondo il piano di sviluppo fisso approvato sei anni fa, che prevede il rilascio di nuovi rami stabili una volta all'anno e di aggiornamenti correttivi ogni tre mesi. Circa un mese dopo, è previsto il rilascio del primo aggiornamento correttivo Perl 5.30.1, che correggerà i principali bug riscontrati durante l'implementazione di Perl 5.30.0. Contestualmente al lancio di Perl 5.30, il supporto per il ramo 5.26 è stato interrotto, per il quale in futuro potrebbero essere rilasciati aggiornamenti solo in caso di problemi critici di sicurezza. È anche iniziato il processo di sviluppo del ramo sperimentale 5.31, da cui sarà formata la versione stabile Perl 5.32 nel maggio 2020.
Chiave :
- È stata aggiunta il supporto sperimentale per le operazioni nelle espressioni regolari «» e «» per accesso limitato a modelli nominati precedentemente elaborati. La definizione del modello deve essere entro 255 caratteri dal punto di riferimento;
- Aumentato a 65534 il valore massimo del specificatore di dimensione («n») nei blocchi «{m,n}» delle espressioni regolari;
- Aggiunta limitata maschere per evidenziare determinate categorie di caratteri nelle espressioni regolari, coprendo diversi set di Unicode. Ad esempio, l'espressione «qr! \p{nv= /(?x) \A [0-5] \z / }!» permette di evidenziare tutti i caratteri Unicode che definiscono numeri da 0 a 5, inclusi i varianti thailandesi o bengalesi della scrittura dei numeri;
- Nelle espressioni regolari è stato aggiunto il supporto per i caratteri nominati
all'interno dei modelli delimitati da virgolette singole (qr’\N{name}’); - Il supporto per la specifica Unicode è stato aggiornato alla versione . Rimosso il contrassegno di sviluppo sperimentale dalle chiamate , utilizzati nello sviluppo di estensioni in linguaggio C;
- È stata aggiunta la possibilità di compilare Perl con l'implementazione delle operazioni con la località, supportando il funzionamento in modalità multi-thread (-Accflags='-DUSE_THREAD_SAFE_LOCALE'). In precedenza, tale implementazione era utilizzata solo durante la compilazione della variante multi-thread di Perl, ma ora può essere inclusa per qualsiasi tipo di compilazione;
- La combinazione dei flag '-Dv' (output di debug avanzato) e '-Dr' (debug di espressioni regolari) ora attiva tutte le possibili modalità di debug delle espressioni regolari;
- Rimosse le funzionalità precedentemente dichiarate obsolette:
- Come caratteri separatori di righe e modelli ora l'uso solo di (i caratteri compositi Unicode sono vietati).
- il supporto di alcune forme di utilizzo obsolette da tempo delle espressioni regolari con il carattere '{' senza escaping.
- l'uso delle funzionalità sysread(), syswrite(), recv() e send() con gestori ':utf8'.
- Vietato l'uso delle definizioni 'my' in operatori condizionali falsi di per sé (ad esempio, 'my $x if 0').
- Rimossa la supporto delle variabili speciali '$*' e '$#'.
Interrotta la supporto della chiamata implicita della funzione dump() (ora è necessario specificare esplicitamente CORE::dump()). - La funzione File::Glob::glob è stata rimossa (utilizzare File::Glob::bsd_glob).
- È stata aggiunta una protezione in pack() contro il ritorno di sequenze Unicode non valide.
- Il termine per la cessazione del supporto per l'uso nel codice XS (blocchi C) dei macro che eseguono operazioni con UTF-8 è stato rinviato alla prossima versione.
- Ottimizzazioni delle prestazioni:
- Le operazioni di traduzione da UTF-8 ai punti di codice sono state accelerate (), ad esempio, l'esecuzione dell'operazione ord(«\x7fff») ora richiede il 12% in meno di istruzioni. È stata inoltre migliorata l'efficienza delle operazioni di verifica delle sequenze di caratteri UTF-8;
- Le chiamate ricorsive nella funzione finalize_op() sono state eliminate;
- Piccole ottimizzazioni sono state apportate al codice di consolidamento dei caratteri identici e alla determinazione delle classi di caratteri nelle espressioni regolari;
- i tipi di conversione da segnati a non segnati (IV in UV);
- Accelerato l'algoritmo di conversione degli interi in stringa trattando due cifre contemporaneamente anziché una;
- Sono stati apportati miglioramenti, sulla base dell'analisi dell'azienda LGTM;
- Ottimizzato il codice nei file regcomp.c, regcomp.h e regexec.c;
- Nella gestione delle espressioni regolari è stata notevolmente accelerata l'elaborazione di modelli del tipo «qr/[^a]/» con caratteri ASCII.
- Ripristinato il supporto per la piattaforma Minix3. È possibile compilare utilizzando il compilatore Microsoft Visual Studio 2019 (Visual C++ 14.2);
- Aggiornate le versioni dei moduli inclusi nella distribuzione di base. Sono stati rimossi i moduli principali e .
Fonte: opennet.ru
