Uscita del linguaggio di programmazione Python 3.8

Dopo un anno e mezzo di sviluppo presentato una release significativa del linguaggio di programmazione Python 3.8. Aggiornamenti di sicurezza per il ramo Python 3.8 è previsto 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 novità:

  • Supporto 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)) != '' :

  • Supporto 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)

  • Aggiunto nuovo API C
    per la configurazione delle impostazioni di inizializzazione di Python, che consente un controllo completo di tutto la configurazione 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;
  • Implementato 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;
  • Aggiunti 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 pickle è stata garantita 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 typing è stata introdotta una serie di nuove funzionalità:
    • Classe TypedDict 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 Literal, che consente di limitare un parametro o un valore restituito a valori predefiniti specifici («Literal[‘connected’, ‘disconnected’]»).
    • La costruzione «Final«, 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 PYTHONPYCACHEPREFIX o l'opzione «-X pycache_prefix»;
  • Implementato 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 «continue» consentito utilizzare all'interno del blocco finalmente;
  • Aggiunto un nuovo modulo multiprocessing.shared_memory, che consente di utilizzare segmenti di memoria condivisa in configurazioni multiprocessore;
  • Sulla piattaforma Windows, l'implementazione di asyncio è stata aggiornata per utilizzare la classe ProactorEventLoop;
  • 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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster