Liberazione di a lingua di prugrammazione Python 3.11

Dopu un annu di sviluppu, a liberazione significativa di a lingua di prugrammazione Python 3.11 hè stata publicata. U novu ramu serà supportatu per un annu è mezu, dopu à quale per altri trè anni è mezu, correzioni seranu generati per eliminà e vulnerabilità.

À u listessu tempu, a prova alfa di u ramu Python 3.12 hà iniziatu (in cunfurmità cù u novu prugramma di sviluppu, u travagliu nantu à un novu ramu principia cinque mesi prima di a liberazione di u ramu precedente è righjunghji u stadiu di prova alfa à u mumentu di a prossima versione). ). U ramu Python 3.12 serà in versione alfa per sette mesi, durante i quali e funzioni novi seranu aghjunte è bug riparati. Dopu questu, e versioni beta seranu pruvati per trè mesi, durante i quali l'aghjunzione di novi funziunalità serà pruibita è tutta l'attenzione serà pagata per risolve i bug. Per l'ultimi dui mesi prima di a liberazione, u ramu serà in u stadiu candidatu di liberazione, in quale a stabilizazione finale serà realizata.

I novi aghjunti à Python 3.11 includenu:

  • Un travagliu significativu hè statu fattu per ottimisà u rendiment. U novu ramu include cambiamenti riguardanti l'accelerazione è l'implementazione in linea di e chjama di funzioni, l'usu di interpreti veloci di operazioni standard (x+x, x*x, xx, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), è ancu ottimisazioni preparate da i prughjetti Cinder è HotPy. Sicondu u tipu di carica, ci hè un aumentu di a velocità di esecuzione di codice di 10-60%. In media, u rendimentu nantu à a suite di teste di pyperformance hà aumentatu da 25%.

    U mecanismu di caching bytecode hè statu riprogettatu, chì hà riduciutu u tempu d'iniziu di l'interprete da 10-15%. L'uggetti cù u codice è u bytecode sò stati stati attribuiti da l'interprete, chì hà permessu di eliminà e tappe di unmarshalling bytecode estratti da u cache è cunvertisce l'uggetti cù u codice per esse piazzatu in memoria dinamica.

  • Quandu si vede tracce di chjama in i missaghji di diagnostichi, hè avà pussibule di visualizà l'infurmazioni nantu à l'espressione chì hà causatu l'errore (prima, solu a linea era evidenziata senza dettagliu quale parte di a linea hà causatu l'errore). L'infurmazione di traccia estesa pò ancu esse ottenuta per mezu di l'API è aduprata per mappe struzzioni di bytecode individuali à una pusizione specifica in u codice fonte utilizendu u metudu codeobject.co_positions () o a funzione C API PyCode_Addr2Location (). U cambiamentu rende assai più faciule per debug prublemi cù l'uggetti di u dizziunariu nidificatu, i chjami di funzioni multiple è l'espressioni aritmetiche cumplessi. Traceback (ultima chiamata recente): File "calculation.py", linea 54, in u risultatu = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: divisione per zero
  • Aghjunghje supportu per i gruppi d'eccezzioni, dendu à u prugramma a capacità di generà è processà parechje eccezzioni diverse à una volta. Per raggruppà parechje eccezzioni è suscitanu inseme, novi tipi di eccezzioni ExceptionGroup è BaseExceptionGroup sò stati pruposti, è l'espressione "eccettu *" hè stata aghjunta per mette in risaltu eccezzioni individuali da un gruppu.
  • U metudu add_note() hè statu aghjuntu à a classa BaseException, chì vi permette di aghjunghje una nota di testu à l'eccezzioni, per esempiu, aghjunghjendu infurmazione contextuale chì ùn hè micca dispunibule quandu l'eccezzioni hè ghjittata.
  • Aggiuntu un tipu di Self speciale per rapprisintà a classe privata attuale. Self pò esse usatu per annotà i metudi chì tornanu una istanza di a so classa in una manera più simplice chè cù TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • Aghjunghjite un tipu LiteralString speciale chì pò include solu literali di stringa chì sò cumpatibili cù u tipu LiteralString (vale à dì, stringhe nude è LiteralString, ma micca strings str arbitrarie o cumminate). U tipu LiteralString pò esse usatu per limità u passaghju di l'argumenti di stringa à e funzioni, a sustituzione arbitraria di parti di stringhe in quale pò purtà à vulnerabilità, per esempiu, quandu genera strings per queries SQL o cumandamenti di shell. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query("SELECT * FROM students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query (arbitrary_string) # Error run_query ( # Errore f"SELECT * FROM studenti WHERE name = {arbitrary_string}" )
  • U tipu TypeVarTuple hè statu aghjuntu, chì permette l'usu di generichi variabili, à u cuntrariu di TypeVar, chì ùn copre micca un tipu, ma un numeru arbitrariu di tipi.
  • A biblioteca standard include u modulu tomllib cù funzioni per analizà u formatu TOML.
  • Hè pussibule di marcà elementi individuali di dizziunarii tipati (TypedDict) cù etichette Required è NotRequired per determinà i campi obbligatori è opzionali (per difettu, tutti i campi dichjarati sò richiesti se u paràmetru tutale ùn hè micca stallatu à False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (u campu di l'annu hè facultativu) m3: Film = {"annu": 2022} # Errore, u campu di titulu necessariu ùn hè micca cumpletu)
  • A classa TaskGroup hè stata aghjunta à u modulu asyncio cù l'implementazione di un gestore di cuntestu asincronu chì aspetta un gruppu di compiti per compie. L'aghjunzione di e attività à un gruppu hè fatta cù u metudu create_task (). async def main(): async cù asyncio.TaskGroup () as tg: task1 = tg.create_task (some_coro (...)) task2 = tg.create_task (altru_coro (...)) print ("I dui travaglii sò finiti avà .")
  • Added @dataclass_transform decoratore per classi, metudi è funzioni, quandu specificatu, u sistema di verificazione di u tipu staticu tratta l'ughjettu cum'è s'ellu si usa u decoratore @dataclasses.dataclass. In l'esempiu quì sottu, a classa CustomerModel, quandu cuntrolla i tipi, serà trattata in modu simile à una classa cù u decoratore @dataclasses.dataclass, i.e. cum'è avè un metudu __init__ chì accetta variabili id ​​è nome. @dataclass_transform() class ModelBase: ... class CustomerModel (ModelBase): id: int nome: str
  • In l'espressioni rigulari, hè stata aghjunta a capacità d'utilizà raggruppamenti atomichi ((?>...)) è quantificatori pussessivi (*+, ++, ?+, {m,n}+).
  • Aggiunta l'opzione di linea di cummanda "-P" è a variabile d'ambiente PYTHONSAFEPATH per disattivà l'attaccamentu automaticu di percorsi di file potenzialmente insicuri à sys.path.
  • L'utilità py.exe per a piattaforma Windows hè stata migliurata significativamente, aghjunghjendu supportu per a sintassi "-V:". / " in oltre "- . "
  • Parechji macros in l'API C sò cunvertiti in funzioni inline regulari o statiche.
  • I moduli uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev è sunau sò stati obsoleti è seranu rimossi in Python 3.13 liberazione. Eliminate e funzioni PyUnicode_Encode*.

Source: opennet.ru

Add a comment