Vydanie programovacieho jazyka Python 3.11

Po roku vývoja bolo zverejnené významné vydanie programovacieho jazyka Python 3.11. Nová pobočka bude podporovaná jeden a pol roka, po ktorom sa pre ňu budú ešte tri a pol roka generovať opravy na odstránenie zraniteľností.

Zároveň sa začalo alfa testovanie vetvy Python 3.12 (v súlade s novým harmonogramom vývoja sa práce na novej vetve začínajú päť mesiacov pred vydaním predchádzajúcej vetvy a do fázy alfa testovania sa dostanú do ďalšieho vydania ). Vetva Python 3.12 bude vo verzii alfa sedem mesiacov, počas ktorých budú pridané nové funkcie a opravené chyby. Potom budú beta verzie testované tri mesiace, počas ktorých bude zakázané pridávanie nových funkcií a všetka pozornosť sa bude venovať opravám chýb. Posledné dva mesiace pred vydaním bude pobočka v štádiu kandidáta na vydanie, v ktorom sa vykoná konečná stabilizácia.

Nové prírastky do Pythonu 3.11 zahŕňajú:

  • Na optimalizácii výkonu sa vykonala značná práca. Nová vetva zahŕňa zmeny súvisiace so zrýchlením a inline nasadením volaní funkcií, využitím rýchlych interpretov štandardných operácií (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), ako aj optimalizácie pripravené projektmi Cinder a HotPy. V závislosti od typu záťaže dochádza k zvýšeniu rýchlosti vykonávania kódu o 10-60%. V priemere sa výkon v testovacej sade pyperformance zvýšil o 25 %.

    Mechanizmus ukladania bajtkódu do vyrovnávacej pamäte bol prepracovaný, čo skrátilo čas spustenia tlmočníka o 10 – 15 %. Objekty s kódom a bajtkódom sú teraz staticky alokované tlmočníkom, čo umožnilo eliminovať fázy rozloženia bajtkódu extrahovaného z vyrovnávacej pamäte a konverzie objektov s kódom na umiestnenie do dynamickej pamäte.

  • Pri zobrazovaní stôp hovorov v diagnostických správach je teraz možné zobraziť informácie o výraze, ktorý chybu spôsobil (predtým bol zvýraznený iba riadok bez podrobností o tom, ktorá časť riadku chybu spôsobila). Rozšírené informácie o sledovaní možno získať aj prostredníctvom API a použiť ich na mapovanie jednotlivých inštrukcií bajtového kódu na konkrétnu pozíciu v zdrojovom kóde pomocou metódy codeobject.co_positions() alebo funkcie C API PyCode_Addr2Location(). Táto zmena výrazne uľahčuje ladenie problémov s vnorenými objektmi slovníka, viacerými volaniami funkcií a zložitými aritmetickými výrazmi. Spätné sledovanie (posledný posledný hovor): Súbor "calculation.py", riadok 54, vo výsledku = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: delenie nulou
  • Pridaná podpora pre skupiny výnimiek, čo dáva programu možnosť generovať a spracovávať niekoľko rôznych výnimiek naraz. Na zoskupenie viacerých výnimiek a ich spoločné vyvolanie boli navrhnuté nové typy výnimiek ExceptionGroup a BaseExceptionGroup a na zvýraznenie jednotlivých výnimiek zo skupiny bol pridaný výraz „okrem*“.
  • Do triedy BaseException bola pridaná metóda add_note(), ktorá vám umožňuje pripojiť k výnimke textovú poznámku, napríklad pridať kontextové informácie, ktoré nie sú dostupné, keď je výnimka vyvolaná.
  • Pridaný špeciálny typ Self, ktorý predstavuje aktuálnu súkromnú triedu. Self sa dá použiť na anotovanie metód, ktoré vrátia inštanciu svojej triedy jednoduchším spôsobom ako pomocou TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • Pridaný špeciálny typ LiteralString, ktorý môže obsahovať iba reťazcové literály, ktoré sú kompatibilné s typom LiteralString (t. j. holé a LiteralString reťazce, ale nie ľubovoľné alebo kombinované reťazce str). Typ LiteralString je možné použiť na obmedzenie odovzdávania reťazcových argumentov do funkcií, ľubovoľné nahrádzanie častí reťazcov, v ktorých môže viesť k zraniteľnostiam, napríklad pri generovaní reťazcov pre SQL dotazy alebo príkazy shellu. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_reťazec: 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) # Chyba run_query( # Chyba f"SELECT * FROM študentov WHERE meno = {ľubovoľný_reťazec}" )
  • Bol pridaný typ TypeVarTuple, ktorý umožňuje použitie variabilných generík, na rozdiel od TypeVar, ktoré nepokrývajú jeden typ, ale ľubovoľný počet typov.
  • Štandardná knižnica obsahuje modul tomllib s funkciami na analýzu formátu TOML.
  • Jednotlivé prvky typizovaných slovníkov (TypedDict) je možné označiť menovkami Required a NotRequired na určenie povinných a voliteľných polí (štandardne sú povinné všetky deklarované polia, ak celkový parameter nie je nastavený na False). class Movie(TypedDict): title: str rok: Nevyžadované[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (pole roka je voliteľné) m3: Film = {“rok“: 2022} # Chyba, nie je vyplnené požadované pole názvu)
  • Do modulu asyncio bola pridaná trieda TaskGroup s implementáciou asynchrónneho kontextového manažéra, ktorý čaká na dokončenie skupiny úloh. Pridávanie úloh do skupiny sa vykonáva pomocou metódy create_task(). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Obe úlohy sú teraz dokončené .")
  • Pridaný dekorátor @dataclass_transform pre triedy, metódy a funkcie, keď je špecifikovaný, systém kontroly statického typu zaobchádza s objektom, ako keby používal dekoratér @dataclasses.dataclass. V nižšie uvedenom príklade bude trieda CustomerModel pri kontrole typov spracovaná podobne ako trieda s dekorátorom @dataclasses.dataclass, t.j. ako metódu __init__, ktorá akceptuje premenné id a name. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: str
  • V regulárnych výrazoch pribudla možnosť používať atómové zoskupovanie ((?>...)) a privlastňovacie kvantifikátory (*+, ++, ?+, {m,n}+).
  • Pridaná možnosť príkazového riadka "-P" a premenná prostredia PYTHONSAFEPATH na zakázanie automatického pripájania potenciálne nebezpečných ciest k súborom do sys.path.
  • Pomôcka py.exe pre platformu Windows bola výrazne vylepšená a pridala podporu pre syntax „-V:“. / " Okrem tohoto "- . "
  • Mnohé makrá v C API sú prevedené na bežné alebo statické inline funkcie.
  • Moduly uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev a sunau boli zastarané a budú odstránené v Pythone vydanie 3.13. Odstránené funkcie PyUnicode_Encode*.

Zdroj: opennet.ru

Pridať komentár