Rilascio del linguaggio di programmazione Python 3.13

Dopo un anno di sviluppo è stata pubblicata l'importante release del linguaggio di programmazione Python 3.13. Il nuovo ramo sarà supportato per un anno e mezzo, dopodiché per altri tre anni e mezzo verranno generate correzioni per eliminare le vulnerabilità.

Le nuove aggiunte a Python 3.13 includono:

  • È stata aggiunta un'implementazione sperimentale del compilatore JIT, consentendo miglioramenti significativi delle prestazioni. Per abilitare JIT, CPython ha aggiunto un'opzione di build "-enable-experimental-jit", che richiede l'installazione di LLVM come dipendenza aggiuntiva. Il processo di traduzione del codice macchina in JIT è costruito utilizzando l'architettura "Copy-and-Patch", in cui un file oggetto in formato ELF viene assemblato utilizzando LLVM, contenente dati sulle istruzioni del bytecode e informazioni sulla necessaria sostituzione dei dati. JIT sostituisce le istruzioni bytecode generate durante l'interpretazione del programma con le loro rappresentazioni in codice macchina, sostituendo contemporaneamente i dati necessari per i calcoli (JIT copia modelli già pronti di funzioni già compilate e sostituisce in essi i valori necessari, come argomenti e costanti).
  • Aggiunta una modalità sperimentale per creare CPython senza global interpreter lock (GIL), che viene abilitata utilizzando l'opzione “--without-gil” e consente di eliminare il problema con la parallelizzazione delle operazioni su sistemi multi-core causato dal fatto che il blocco globale non consente l'accesso parallelo a oggetti condivisi da thread diversi. La disabilitazione di GIL introduce un ulteriore sovraccarico causato dalle modifiche al garbage collector, al sistema di gestione della memoria e alle primitive di blocco. Ad esempio, a causa dell'utilizzo del conteggio dei riferimenti per l'isolamento dei thread, gli script a thread singolo subiscono un calo delle prestazioni di circa il 10%. Inoltre, tali costi generali possono essere compensati parallelizzando le operazioni.
  • Viene proposto un interprete interattivo nuovo e migliorato, basato sugli sviluppi del progetto PyPy e che supporta funzionalità come la modifica su più righe, il salvataggio e la visualizzazione della cronologia, la progettazione a colori di query e tracce, l'uso di comandi simili a REPL (aiuto, esci, esci, ecc.) senza coinvolgere funzioni, guida in linea, modalità per l'inserimento di grossi blocchi di codice.
  • La semantica della funzione integrata locals(), che restituisce tutte le variabili locali e i loro valori nell'ambito corrente, è stata modificata per ambiti ottimizzati come funzioni, generatori e coroutine, per i quali istantanee indipendenti delle variabili locali attualmente esposte e le variabili non locali vengono ora restituite nelle chiusure.
  • Il pacchetto predefinito include una versione modificata della libreria mimalloc con il sistema aperto di allocazione della memoria di Microsoft, che dimostra prestazioni molto elevate. La libreria viene utilizzata durante la creazione senza GIL.
  • Il compilatore cancella gli spazi iniziali da ogni stringa del documento (docstring), riducendo il consumo di memoria e la dimensione della cache del bytecode (file .pyc).
  • Il modulo dbm implementa il backend dbm.sqlite3, che utilizza SQLite e viene utilizzato per impostazione predefinita durante la creazione di nuovi file.
  • Supporto implementato per specificare valori predefiniti nei parametri di tipo (typing.TypeVar, typeing.ParamSpec e typeing.TypeVarTuple). Ad esempio: 'T = TypeVar("T", default=int)'.
  • Aggiunta una nuova annotazione type.TypeIs per chiarire i tipi, più intuitiva di type.TypeGuard.
  • Aggiunta la possibilità di utilizzare l'annotazione type.ReadOnly per contrassegnare TypeDicts come di sola lettura.
  • Aggiunta una nuova annotazione warnings.deprecated() per contrassegnare gli elementi deprecati nel sistema tipo.
  • I moduli aifc, audioop, Chunk, cgi, cgitb, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipe, sndhdr, spwd, sunau, telnetlib, uu, xdrlib e lib2to3, precedentemente deprecati, sono stati rimossi dallo standard biblioteca.
  • La funzione copy.replace() è stata aggiunta al modulo copy.
  • Al modulo os sono state aggiunte funzioni per lavorare con il timer tramite i descrittori timerfd.
  • Per il modulo random è stata implementata un'interfaccia a riga di comando.
  • Il supporto per le versioni macOS dalla 10.9 alla 10.12 è stato interrotto.
  • Viene fornito supporto per le piattaforme mobili iOS e Android, che è classificato al terzo livello (Tier 3), in cui l'assemblaggio e la manutenzione affidabili della piattaforma sono garantiti da almeno uno sviluppatore chiave, ma i guasti relativi alla piattaforma non bloccano il rilascio e non sono coperti dal supporto SLA.
  • Il supporto per la piattaforma wasm32-wasi (WebAssembly System Interface) è stato spostato al secondo livello, dove gli errori bloccano il rilascio e le modifiche che li causano vengono corrette o ripristinate entro 24 ore. Il supporto ufficiale per la piattaforma wasm32-emscripten è stato interrotto.

Nelle prossime ore inizierà l'alpha testing del ramo Python 3.14, che resterà in fase di rilascio alpha per sette mesi, durante i quali verranno aggiunte nuove funzionalità e corretti bug (secondo il nuovo programma di sviluppo, lavorare sul nuovo branch inizia cinque mesi prima del rilascio del ramo precedente e al momento del rilascio successivo raggiunge la fase di test alpha). Successivamente, le versioni beta verranno testate per tre mesi, durante i quali sarà vietata l'aggiunta di nuove funzionalità e tutta l'attenzione sarà rivolta alla correzione dei bug. Negli ultimi due mesi prima del rilascio, il branch sarà nella fase di release candidate, nella quale verrà eseguita la stabilizzazione finale.

Fonte: opennet.ru

Aggiungi un commento