Rilascio del linguaggio di programmazione Python 3.8

Dopo un anno e mezzo di sviluppo presentata importante rilascio del linguaggio di programmazione Python 3.8. Aggiornamenti correttivi per il ramo Python 3.8 pianificato rilascio entro 18 mesi. Le vulnerabilità critiche verranno corrette per 5 anni fino a ottobre 2024. Gli aggiornamenti correttivi per il ramo 3.8 verranno rilasciati ogni due mesi, con il primo rilascio correttivo di Python 3.8.1 previsto per dicembre.

Tra gli aggiunti innovazioni:

  • Sostegno operazioni di assegnazione all'interno di espressioni complesse. Con il nuovo operatore “:=" è possibile eseguire operazioni di assegnazione di valori all'interno di altre espressioni, ad esempio per evitare doppie chiamate di funzione nelle istruzioni condizionali e nella definizione dei loop:

    se (n := len(a)) > 10:
    ...

    while (blocco := f.read(256)) != ":
    ...

  • Sostegno nuova sintassi per specificare gli argomenti della funzione. Quando si enumerano gli argomenti durante la definizione di una funzione, ora è possibile specificare un "/" per separare gli argomenti a cui possono essere assegnati solo valori in base all'ordine in cui i valori vengono enumerati durante la chiamata della funzione, dagli argomenti a cui possono essere assegnati in qualsiasi ordine (sintassi variabile=valore)). Dal punto di vista pratico, la nuova funzionalità consente alle funzioni in Python di emulare completamente il comportamento delle funzioni esistenti in C e anche di evitare il legame con nomi specifici, ad esempio, se si prevede che il nome del parametro venga modificato in futuro.

    Il flag "/" integra il flag "*" precedentemente aggiunto, separando le variabili per le quali è applicabile solo un'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 nell'ordine in cui sono elencati i valori ,
    variabili “e” e “f”, solo attraverso l’assegnazione “variabile=valore”, e le variabili “c” e “d” in uno dei seguenti modi:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Aggiunto nuova API C
    per configurare i parametri di inizializzazione di Python, consentendo il controllo completo su tutto configurazione e fornire funzionalità avanzate di gestione degli errori. L'API proposta semplifica l'integrazione della funzionalità dell'interprete Python in altre applicazioni C;

  • Implementato nuovo protocollo Vectorcall per un accesso più rapido agli oggetti scritti in linguaggio C. In CPython 3.8 l'accesso a Vectorcall è ancora limitato all'uso interno; in CPython 3.9 è previsto il trasferimento nella categoria delle API accessibili pubblicamente;
  • Aggiunto chiamate a Runtime Audit Hooks, che forniscono alle applicazioni e ai framework in Python l'accesso a informazioni di basso livello sull'avanzamento dello script per controllare le azioni eseguite (ad esempio, è possibile tenere traccia dell'importazione di moduli, dell'apertura di file, utilizzando una traccia, accesso ai socket di rete, esecuzione del codice tramite exec, eval e run_mod);
  • Nel modulo salamoia purché supporto per il protocollo Pickle 5, utilizzato per serializzare e deserializzare oggetti. Pickle consente di ottimizzare il trasferimento di grandi quantità di dati tra processi Python in configurazioni multi-core e multi-nodo riducendo il numero di operazioni di copia della memoria e applicando tecniche di ottimizzazione aggiuntive come l'utilizzo di algoritmi di compressione specifici dei dati. La quinta versione del protocollo si distingue per l'aggiunta di una modalità di trasmissione fuori banda, in cui i dati possono essere trasmessi separatamente dal flusso pickle principale.
  • Di default è attivata la quarta versione del protocollo Pickle che, rispetto alla terza versione precedentemente offerta di default, consente prestazioni più elevate e una riduzione della dimensione dei dati trasmessi;
  • Nel modulo digitando Vengono introdotte diverse novità:
    • classe DigitatoDict per array associativi in ​​cui le informazioni sul tipo sono specificate esplicitamente per i dati associati alle chiavi (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • tipo letterale, che consente di limitare un parametro o restituire un valore a pochi valori predefiniti ("Literal['connected', 'disconnected']").
    • Costruzione "fine", che permette di definire i valori di variabili, funzioni, metodi e classi che non possono essere modificati o riassegnati ("pi: Final[float] = 3.1415926536").
  • Aggiunta la possibilità di assegnare una cache ai file compilati con bytecode, salvati in un albero FS separato e separati dalle directory con il codice. Il percorso per il salvataggio dei file con bytecode viene impostato tramite una variabile PYTHONPYCACHEPREFIX o l'opzione "-X pycache_prefix";
  • Implementato la possibilità di creare build di debug di Python che utilizzano un'ABI identica alla release, che consente di caricare estensioni scritte in linguaggio SI, compilate per release stabili, nelle build di debug;
  • Le stringhe f (letterali formattati con prefisso 'f') forniscono supporto per l'operatore = (ad esempio, "f'{expr=}'"), che consente di convertire un'espressione in testo per un debug più semplice. Per esempio:

    ››› utente = 'eric_idle'
    ››› membro_da = data(1975, 7, 31)
    ››› f'{utente=} {membro_since=}'
    "utente='eric_idle' membro_since=datetime.date(1975, 7, 31)"

  • Espressione "continua» può essere utilizzato all'interno di un blocco infine;
  • Nuovo modulo aggiunto multiprocessing.shared_memory, consentendo l'uso di segmenti di memoria condivisa in configurazioni multiprocesso;
  • Sulla piattaforma Windows, l'implementazione asyncio è stata spostata per utilizzare la classe ProactorEventLoop;
  • Le prestazioni dell'istruzione LOAD_GLOBAL sono state aumentate di circa il 40% grazie all'utilizzo di un nuovo meccanismo di memorizzazione nella cache del codice oggetto.

Fonte: opennet.ru

Aggiungi un commento