Dopo un anno e mezzo di sviluppo una release significativa del linguaggio di programmazione . Aggiornamenti di sicurezza per il ramo Python 3.8 verranno rilasciati per un periodo di 18 mesi. Le vulnerabilità critiche saranno corrette per 5 anni fino a ottobre 2024. Gli aggiornamenti correttivi per il ramo 3.8 usciranno ogni due mesi, con il primo aggiornamento programmato per dicembre, Python 3.8.1.
Tra le novità aggiunte :
- le operazioni di assegnazione all'interno di espressioni complesse. Con il nuovo operatore «:=» è ora possibile eseguire operazioni di assegnazione di valori all'interno di altre espressioni, ad esempio per evitare chiamate doppie di funzioni in operatori condizionali e durante la definizione di cicli:
if (n := len(a)) > 10:
…while (block := f.read(256)) != '' :
… - nuova sintassi per la definizione degli argomenti delle funzioni. Durante l'elenco degli argomenti nella definizione di una funzione, ora è possibile specificare il segno «/», che consente di separare gli argomenti i cui valori possono essere assegnati solo in base all'ordine in cui vengono elencati durante la chiamata della funzione, da quelli che consentono l'assegnazione in ordine arbitrario (sintassi «variabile=valore»). Dal punto di vista pratico, questa nuova possibilità consente di emulare completamente il comportamento delle funzioni esistenti in linguaggio C all'interno delle funzioni in Python, evitando anche vincoli a nomi specifici, ad esempio se si prevede che il nome del parametro possa essere cambiato in futuro.
Il flag «/» si aggiunge al precedente segno «*», che separa le variabili a cui è applicabile solo l'assegnazione nella forma «variabile=valore». Ad esempio, nella funzione «def f(a, b, /, c, d, *, e, f):», le variabili «a» e «b» possono essere assegnate solo in base all'ordine in cui vengono elencati i valori.
Le variabili «e» e «f» possono essere assegnate solo tramite «variabile=valore», mentre le variabili «c» e «d» possono essere assegnate in qualsiasi modo indicato:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, c=30, d=40, e=50, f=60) - nuovo API C
per la configurazione delle impostazioni di inizializzazione di Python, che consente un controllo completo di tutto e fornisce strumenti avanzati per la gestione degli errori. L'API proposta semplifica l'integrazione delle funzionalità dell'interprete Python in altre applicazioni scritte in C; - un nuovo protocollo Vectorcall per l'accesso più rapido a oggetti scritti in C. In CPython 3.8, l'accesso a Vectorcall è attualmente limitato all'uso interno, con la transizione a API pubbliche prevista in CPython 3.9;
- le chiamate Runtime Audit Hooks, che forniscono a applicazioni e framework in Python l'accesso a informazioni a basso livello sul progresso dell'esecuzione dello script per condurre audit delle azioni eseguite (ad esempio, è possibile monitorare l'importazione di moduli, l'apertura di file, l'uso di tracing, gli accessi a socket di rete, l'esecuzione di codice tramite exec, eval e run_mod);
- Nel modulo supporto del protocollo Pickle 5, utilizzato per la serializzazione e deserializzazione degli oggetti. Pickle ottimizza il trasferimento di grandi volumi di dati tra i processi Python in configurazioni multicore e multi-nodo, riducendo il numero di operazioni di copia della memoria e applicando tecniche di ottimizzazione aggiuntive, come l'uso di algoritmi di compressione specifici per determinati dati. La quinta versione del protocollo è notevole per l'aggiunta della modalità di trasferimento separato (out-of-band), in cui i dati possono essere trasmessi separatamente dal flusso principale di pickle.
- La quarta versione del protocollo Pickle è attivata di default, rispetto alla terza versione precedentemente proposta come default, offre prestazioni superiori e una riduzione della dimensione dei dati trasmessi.
- Nel modulo è stata introdotta una serie di nuove funzionalità:
- Classe per i dizionari associativi, in cui per i dati associati alle chiavi viene esplicitamente definita l'informazione di tipo ("TypedDict(‘Point2D’, x=int, y=int, label=str)").
- Tipo , che consente di limitare un parametro o un valore restituito a valori predefiniti specifici («Literal[‘connected’, ‘disconnected’]»).
- La costruzione ««, che consente di definire i valori di variabili, funzioni, metodi e classi che non possono essere modificati o riassegnati («pi: Final[float] = 3.1415926536»).
- È stata aggiunta la possibilità di assegnare una cache per i file compilati con bytecode, memorizzati in una directory FS separata da quelle del codice. Il percorso per il salvataggio dei file con bytecode è impostato tramite la variabile o l'opzione «-X pycache_prefix»;
- la possibilità di creare build di debug di Python che utilizzano lo stesso ABI delle versioni di rilascio, consentendo di caricare, in queste build di debug, estensioni scritte in C compilate per rilasci stabili;
- Nelle f-string (letterali formattabili con prefisso ‘f’) è stato introdotto il supporto per l'operatore «=» (ad esempio, «f'{expr=}'»), che consente di convertire un'espressione in testo per semplificare il debug. Ad esempio:
››› user = ‘eric_idle’
››› member_since = date(1975, 7, 31)
››› f'{user=} {member_since=}'
«user=’eric_idle’ member_since=datetime.date(1975, 7, 31)» - Esprimere «» consentito utilizzare all'interno del blocco ;
- Aggiunto un nuovo modulo , che consente di utilizzare segmenti di memoria condivisa in configurazioni multiprocessore;
- Sulla piattaforma Windows, l'implementazione di asyncio è stata aggiornata per utilizzare la classe ;
- Le prestazioni dell'istruzione LOAD_GLOBAL sono aumentate di circa il 40% grazie all'uso di un nuovo meccanismo di caching del codice oggetto.
Fonte: opennet.ru
