Dopo un anno di sviluppo, è stata pubblicata una versione significativa del linguaggio di programmazione Python 3.14. Questo ramo sarà supportato per un anno e mezzo, dopodiché altri tre anni e mezzo saranno dedicati alla correzione delle vulnerabilità.
Tra le novità introdotte in Python 3.14 (1, 2, 3):
- È stata implementata la supporto ufficiale per la costruzione di CPython senza il Global Interpreter Lock (GIL). La costruzione senza GIL consente di superare il problema della parallelizzazione delle operazioni su sistemi multicore, causato dal fatto che il blocco globale non permette l'accesso parallelo agli oggetti condivisi da thread diversi. Disattivare il GIL porta a costi aggiuntivi causati dalle modifiche nel garbage collector, nel sistema di gestione della memoria e nei primitivi per l'organizzazione dei blocchi. Ad esempio, a causa dell'utilizzo del conteggio dei riferimenti per isolare i thread, si osserva una riduzione delle prestazioni degli scenari monofilo di circa il 10%. Tuttavia, questi costi possono essere compensati dalla parallelizzazione delle operazioni.
- È stata aggiunta la compatibilità con le stringhe t (letterali con il prefisso ‘t’) che consentono di utilizzare una sintassi simile alle f-string per creare gestori personalizzati nei template delle stringhe. A differenza delle f-string, le t-string restituiscono un oggetto che memorizza separatamente i dati delle stringhe statiche e i valori sostituiti. Questa memorizzazione separata consente di collegare gestori personalizzati che influenzano solo i valori sostituiti. Ad esempio, è possibile collegare un gestore per convertire il valore sostituito in maiuscolo o per eseguire l’escaping dei caratteri speciali quando si sostituiscono i dati esterni nella stringa. variety = ‘Stilton’ template = t’Prova un po’ di formaggio {variety}!’ print(list(template)) print(lower_upper(template)) [‘Prova un po’ di ‘, Interpolation(‘Stilton’, ‘variety’, None, »), ‘ formaggio!’] Prova un po’ di FORMAGGIO STILTON! attributes = {‘src’: ‘limburger.jpg’, ‘alt’: ‘formaggio adorabile’} template = t'<img {attributes}>print (html(template)) <img src="»limburger.jpg»" alt="»formaggio adorabile" cheese» />
- È stato aggiunto alla libreria standard il modulo concurrent.interpreters, che consente di eseguire più copie isolate dell'interprete Python all'interno di un singolo processo. In precedenza, questa possibilità era disponibile solo tramite C-API. L'esecuzione simultanea di più interpreti può essere utilizzata per parallelizzare le operazioni, simile all'esecuzione di più processi paralleli, ma a differenza del modello multi-processo consuma meno risorse. A livello di applicazione, per separare le operazioni tra interpreti possono essere utilizzati il modello degli attori e CSP (interazione fra processi sequenziali).
- In CPython è stato implementato un nuovo tipo di interprete che utilizza chiamate di coda tra le funzioni C che implementano i singoli bytecode Python, invece di una grande funzione con espressioni switch/case. Nella compilazione con Clang 19, il nuovo interprete mostra un incremento delle prestazioni del 3-5% durante l'esecuzione dei test di pyperformance. Questo nuovo interprete è attualmente disponibile come opzione per le architetture x86-64 e AArch64, e richiede almeno la versione 19 di Clang per la compilazione (il supporto per GCC è previsto in un secondo momento).
- È stata implementata la gestione differita delle annotazioni per funzioni, classi e moduli. Le annotazioni non vengono più elaborate immediatamente, ma vengono conservate come funzioni specializzate e calcolate solo al bisogno. Questo nuovo comportamento semplifica l'uso delle annotazioni e riduce l'overhead della loro elaborazione durante l'esecuzione. Per ispezionare le annotazioni differite è stato introdotto il modulo annotationlib.
- Nella libreria standard è stato aggiunto il pacchetto compression, che fornisce funzioni per comprimere e decomprimere i dati tramite vari algoritmi. Oltre ai moduli compression.lzma, compression.bz2, compression.gzip e compression.zlib, che offrono accesso alle funzionalità già disponibili nei moduli lzma, bz2, gzip e zlib, è stato aggiunto un nuovo modulo compression.zstd con l'implementazione dell'algoritmo ZSTD (Zstandard).
- Negli espressioni «except» ed «except*» è ora consentito non racchiudere il contenuto tra parentesi se vengono indicati più tipi di eccezioni e non è usata la parola chiave «as». try: connect_to_server() except TimeoutError, ConnectionRefusedError: print(‘La rete ha smesso di funzionare!’)
- Nella shell interattiva PyREPL è implementata la evidenziazione della sintassi. È attivata l'uscita colorata nelle utilità CLI dei moduli unittest, argparse, json e calendar.
- È stata aggiunta un'interfaccia per collegare debugger e profiler esterni a processi CPython già in esecuzione, senza necessità di fermarli o riavviarli, e senza influire sulle prestazioni.
- Il modulo pdb ha aggiunto il supporto per la connessione remota a processi Python in esecuzione. Ad esempio, per collegarsi a un processo con il numero 1234 è possibile usare il comando «python -m pdb -p 1234».
- Nel modulo uuid sono state aggiunte le funzioni uuid6(), uuid7() e uuid8() con implementazione delle versioni 6, 7 e 8 degli identificatori UUID.
- È stato aggiunto un avviso all'uso delle espressioni «return», «break» e «continue» per uscire dal blocco «finally».
- È stata aggiunta l'API C PyInitConfig per configurare l'inizializzazione di Python senza legami con strutture in linguaggio C, permettendo di apportare modifiche che non violano l'ABI. Vengono fornite le funzioni Add PyConfig_Get() e PyConfig_Set() per ottenere e impostare la configurazione, così come la funzione PyInitConfig_AddModule() per aggiungere un modulo con estensione.
- Migliorati i messaggi di errore. Aggiunte raccomandazioni per la risoluzione degli errori dovuti a errori di battitura nelle parole chiave.
- I risultati del progetto di sostituzione delle implementazioni degli algoritmi crittografici in Python, offerti nei moduli hashlib e hmac, sono stati integrati. Sono state sostituite tutte le funzioni hash e HMAC fornite di default in Python con varianti per cui è stata fornita una prova formale di correttezza, preparata dal progetto "HACL*". Tra le altre cose, è stata aggiunta un'implementazione HMAC-BLAKE2 che utilizza istruzioni SIMD AVX2 per accelerare i calcoli.
- Introdotto un nuovo interfaccia della riga di comando ("python -m asyncio ps PID" e "python -m asyncio pstree PID") per ispezionare i processi Python in esecuzione con compiti asincroni (asyncio).
- Nelle build pronte per macOS e Windows è stato incluso un compilatore JIT sperimentale. L'installatore per Windows è stato sostituito con un gestore di installazione.
- Per la verifica dell'integrità delle build, è stato utilizzato un sistema di verifica crittografica del codice Sigstore al posto delle firme PGP.
- Sono state fornite build binarie ufficiali per la piattaforma Android.
Nei prossimi giorni inizierà il testing alpha della branch Python 3.15, che sarà in fase di alpha release per sette mesi, durante i quali verranno aggiunte nuove funzionalità e corretti bug (in accordo con il nuovo piano di sviluppo, il lavoro su una nuova branch inizia cinque mesi prima del rilascio della branch precedente, e al momento del rilascio successivo raggiunge la fase di testing alpha). Successivamente, per tre mesi, si svolgerà il testing della beta version, durante il quale non saranno permesse aggiunte di nuove funzionalità e tutta l'attenzione sarà rivolta alla correzione di bug. Gli ultimi due mesi prima del rilascio la branch sarà in fase di release candidate, durante la quale verrà eseguita la stabilizzazione finale.
Fonte: opennet.ru
