Dopo un anno di sviluppo, è stata rilasciata una versione significativa del linguaggio di programmazione Python 3.13. Questo ramo sarà supportato per un anno e mezzo, dopodiché per ulteriori tre anni verranno forniti aggiornamenti con correzioni di vulnerabilità.
Tra le novità introdotte in Python 3.13:
- È stata aggiunta un'implementazione sperimentale del compilatore JIT, che consente un significativo aumento delle prestazioni. Per abilitare il JIT in CPython è stata introdotta l'opzione di compilazione «—enable-experimental-jit», il cui utilizzo richiede l'installazione di LLVM come dipendenza aggiuntiva. Il processo di traduzione del codice macchina in JIT si basa sull'architettura «Copy-and-Patch», in cui LLVM compila un file oggetto in formato ELF contenente informazioni sulle istruzioni del bytecode e sui necessari sostituzioni. Il JIT sostituisce le istruzioni del bytecode generate durante l'interpretazione del programma con le loro rappresentazioni nel codice macchina, inserendo nel contempo i dati necessari per i calcoli (il JIT copia modelli già compilati e inserisce i valori necessari, come argomenti e costanti).
- È stata introdotta una modalità sperimentale per compilare CPython senza il Global Interpreter Lock (GIL), attivabile con l'opzione «—without-gil», che consente di superare il problema della parallelizzazione delle operazioni nei sistemi multicore, poiché il GIL impedisce l'accesso parallelo a oggetti condivisi da thread diversi. Disattivare il GIL comporta costi aggiuntivi legati alle modifiche nel garbage collector, nel sistema di gestione della memoria e nelle primitive per la gestione dei lock. Ad esempio, l'uso del counting delle referenze per isolare i thread comporta una riduzione delle prestazioni negli scenari a singolo thread di circa il 10%. Tuttavia, tali costi aggiuntivi possono essere compensati dalla parallelizzazione delle operazioni.
- È stato proposto un nuovo interprete interattivo migliorato, basato sui risultati del progetto PyPy, che supporta funzionalità come la modifica multilinea, il salvataggio e la visualizzazione della cronologia, una formattazione a colori delle richieste e dei trace, l'uso di comandi simili a REPL (help, exit, quit, ecc.) senza dover richiamare funzioni, assistenza interattiva e la modalità di inserimento di grandi blocchi di codice.
- È stata modificata la semantica della funzione integrata locals(), che restituisce tutte le variabili locali e i loro valori nell'ambito attuale, per gli ambiti ottimizzati come funzioni, generatori e coroutine, per i quali ora vengono restituiti snapshot indipendenti delle variabili locali e non locali riflettute nelle chiusure.
- È stata inclusa di default una versione modificata della libreria mimalloc della Microsoft, un sistema di allocazione della memoria che dimostra un'ottima performance. La libreria è utilizzata nella compilazione senza GIL.
- Il compilatore si occupa di rimuovere gli spazi bianchi iniziali da ogni stringa documentativa (docstring), il che ha consentito una riduzione della memoria consumata e una diminuzione della dimensione della cache del bytecode (file .pyc).
- Nel modulo dbm è stato implementato il backend dbm.sqlite3, che utilizza SQLite ed è applicato di default nella creazione di nuovi file.
- È stata implementata la supporto per la definizione di valori di default nei parametri di tipo (typing.TypeVar, typing.ParamSpec e typing.TypeVarTuple). Ad esempio: ‘T = TypeVar("T", default=int)’.
- È stata aggiunta una nuova annotazione typing.TypeIs per una specificazione dei tipi, più intuitiva rispetto a typing.TypeGuard.
- È stata introdotta la possibilità di utilizzare l'annotazione typing.ReadOnly per contrassegnare gli elementi TypeDicts disponibili solo in modalità di sola lettura.
- È stata introdotta una nuova annotazione warnings.deprecated() per contrassegnare gli elementi obsoleti nel sistema di tipi.
- I seguenti moduli sono stati rimossi dalla libreria standard: aifc, audioop, chunk, cgi, cgitb, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu, xdrlib e lib2to3, precedentemente dichiarati obsoleti.
- Nel modulo copy è stata aggiunta la funzione copy.replace().
- Nel modulo os sono state introdotte funzioni per la gestione dei timer attraverso i descrittori timerfd.
- Per il modulo random è stato implementato un'interfaccia della riga di comando.
- È stata interrotta la supporto per le versioni di macOS dalla 10.9 alla 10.12.
- È stato garantito il supporto per le piattaforme mobili iOS e Android, classificate come Tier 3, per le quali è assicurata una compilazione affidabile e il supporto è fornito da almeno uno sviluppatore chiave, ma eventuali malfunzionamenti legati a questa piattaforma non bloccano il rilascio e non sono coperti dal supporto SLA.
- Il supporto per la piattaforma wasm32-wasi (WebAssembly System Interface) è stato aggiornato al secondo livello, in cui gli errori bloccano il rilascio e le modifiche che li provocano vengono corrette o annullate entro 24 ore. È stata interrotta l'assistenza ufficiale per la piattaforma wasm32-emscripten.
Nelle prossime ore inizierà il beta testing della versione Python 3.14, che rimarrà in fase di anteprima per sette mesi, durante i quali verranno aggiunte nuove funzionalità e risolti errori (secondo il nuovo programma di sviluppo, il lavoro sulla nuova versione inizia cinque mesi prima del rilascio della versione precedente e al momento del successivo rilascio raggiunge la fase di beta testing). Successivamente, per tre mesi verrà condotto il test delle versioni beta, durante il quale non sarà consentito l'aggiunta di nuove funzionalità e l'attenzione sarà rivolta esclusivamente alla risoluzione degli errori. Gli ultimi due mesi prima del rilascio la versione sarà in fase di candidate, durante la quale verrà effettuata la stabilizzazione finale.
Fonte: opennet.ru
