Programmēšanas valodas Python 3.11 izlaišana

Pēc gada izstrādes ir publicēts nozīmīgs Python 3.11 programmēšanas valodas izlaidums. Jaunā filiāle tiks atbalstīta pusotru gadu, pēc tam vēl trīsarpus gadus tai tiks ģenerēti labojumi, lai novērstu ievainojamības.

Tajā pašā laikā sākās Python 3.12 filiāles alfa testēšana (saskaņā ar jauno izstrādes grafiku darbs pie jaunas filiāles sākas piecus mēnešus pirms iepriekšējās filiāles izlaišanas un sasniedz alfa testēšanas stadiju līdz nākamās izlaišanas brīdim ). Python 3.12 atzars alfa versijā būs septiņus mēnešus, kuru laikā tiks pievienotas jaunas funkcijas un izlabotas kļūdas. Pēc tam beta versijas tiks testētas trīs mēnešus, kuru laikā jaunu funkciju pievienošana būs aizliegta un visa uzmanība tiks pievērsta kļūdu labošanai. Pēdējos divus mēnešus pirms izlaišanas filiāle būs izlaiduma kandidāta stadijā, kurā tiks veikta galīgā stabilizācija.

Jaunie Python 3.11 papildinājumi ietver:

  • Ir veikts ievērojams darbs, lai optimizētu veiktspēju. Jaunajā atzarā ir iekļautas izmaiņas, kas saistītas ar funkciju izsaukumu paātrināšanu un iekļauto izvietošanu, ātro standarta operāciju tulku izmantošanu (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), kā arī Cinder un HotPy projektu sagatavotās optimizācijas. Atkarībā no slodzes veida koda izpildes ātrums palielinās par 10-60%. Vidēji pyperformance testa komplekta veiktspēja palielinājās par 25%.

    Ir pārveidots baitkoda kešatmiņas mehānisms, kas ir samazinājis tulka palaišanas laiku par 10-15%. Objektus ar kodu un baitkodu tagad statiski piešķir tulks, kas ļāva novērst no kešatmiņas iegūtā baitkoda atdalīšanas posmus un objektu konvertēšanu ar kodu, lai tos ievietotu dinamiskajā atmiņā.

  • Rādot zvanu pēdas diagnostikas ziņojumos, tagad ir iespējams parādīt informāciju par izteiksmi, kas izraisīja kļūdu (iepriekš tika izcelta tikai līnija, neprecizējot, kura līnijas daļa izraisīja kļūdu). Paplašinātu izsekošanas informāciju var iegūt arī, izmantojot API, un izmantot atsevišķu baitu koda instrukciju kartēšanai uz noteiktu vietu avota kodā, izmantojot metodi codeobject.co_positions() vai C API funkciju PyCode_Addr2Location(). Izmaiņas ievērojami atvieglo problēmu atkļūdošanu ar ligzdotiem vārdnīcas objektiem, vairāku funkciju izsaukumiem un sarežģītām aritmētiskām izteiksmēm. Traceback (pēdējais zvans): fails "calculation.py", 54. rindiņa, rezultāts = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: dalīšana ar nulli
  • Pievienots atbalsts izņēmumu grupām, dodot programmai iespēju ģenerēt un apstrādāt vairākus dažādus izņēmumus vienlaikus. Lai grupētu vairākus izņēmumus un apkopotu tos kopā, ir ierosināti jauni izņēmumu veidi ExceptionGroup un BaseExceptionGroup, un ir pievienota izteiksme “izņemot*”, lai izceltu atsevišķus izņēmumus no grupas.
  • Klasei BaseException ir pievienota metode add_note(), kas ļauj izņēmumam pievienot teksta piezīmi, piemēram, pievienojot kontekstuālo informāciju, kas nav pieejama, kad izņēmums tiek izmests.
  • Pievienots īpašs Self tips, lai attēlotu pašreizējo privāto klasi. Self var izmantot, lai anotētu metodes, kas atgriež savas klases gadījumu vienkāršāk nekā izmantojot TypeVar. klase MyLock: def __enter__(self) -> Self: self.lock() return self
  • Pievienots īpašs LiteralString veids, kas var ietvert tikai virknes literāļus, kas ir saderīgi ar LiteralString tipu (t.i., tukšās un LiteralString virknes, bet ne patvaļīgas vai kombinētas str virknes). Tipu LiteralString var izmantot, lai ierobežotu virknes argumentu nodošanu funkcijām, patvaļīgu virkņu daļu aizstāšanu, kas var izraisīt ievainojamības, piemēram, ģenerējot virknes SQL vaicājumiem vai čaulas komandām. def run_query(sql: LiteralString) -> ... ... def caller(patvaļīga_string: str, vaicājuma_string: LiteralString, tabulas_nosaukums: 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( # Error f"SELECT * FROM students WHERE name = {patvaļīga_string}" )
  • Ir pievienots TypeVarTuple tips, kas ļauj izmantot mainīgo sugas, atšķirībā no TypeVar, kas attiecas nevis uz vienu veidu, bet gan uz patvaļīgu skaitu veidu.
  • Standarta bibliotēkā ir iekļauts modulis tomllib ar TOML formāta parsēšanas funkcijām.
  • Ir iespējams atzīmēt atsevišķus drukāto vārdnīcu elementus (TypedDict) ar etiķetēm Required un NotRequired, lai noteiktu obligātos un neobligātos laukus (pēc noklusējuma visi deklarētie lauki ir obligāti, ja kopējais parametrs nav iestatīts uz False). klases Filma(TypedDict): nosaukums: str gads: NotRequired[int] m1: Filma = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Zvaigžņu kari" } # Labi (gada lauks nav obligāts) m3: Filma = {“gads”: 2022} # Kļūda, nav aizpildīts nepieciešamais nosaukuma lauks)
  • TaskGroup klase ir pievienota asinhrono modulim, ieviešot asinhrono konteksta pārvaldnieku, kas gaida uzdevumu grupas pabeigšanu. Uzdevumu pievienošana grupai tiek veikta, izmantojot metodi create_task(). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(other_coro(...)) print("Abi uzdevumi tagad ir pabeigti .")
  • Klasēm, metodēm un funkcijām pievienots @dataclass_transform dekorētājs, kad tas ir norādīts, statiskā tipa pārbaudes sistēma apstrādā objektu tā, it kā izmantotu @dataclasses.dataclass dekoratoru. Tālāk esošajā piemērā CustomerModel klase, pārbaudot tipus, tiks apstrādāta līdzīgi kā klase ar @dataclasses.dataclass dekoratoru, t.i. kā ar __init__ metodi, kas pieņem id un nosaukuma mainīgos. @dataclass_transform() klase ModelBase: ... klase CustomerModel(ModelBase): id: int nosaukums: str
  • Regulārajās izteiksmēs ir pievienota iespēja izmantot atomu grupēšanu ((?>...)) un piederošos kvantorus (*+, ++, ?+, {m,n}+).
  • Pievienota komandrindas opcija "-P" un vides mainīgais PYTHONSAFEPATH, lai atspējotu automātisku potenciāli nedrošu failu ceļu pievienošanu vietnei sys.path.
  • Windows platformas py.exe utilīta ir ievērojami uzlabota, pievienojot atbalstu sintaksei “-V:”. / " Papildus "- . "
  • Daudzi makro C API tiek pārveidoti par regulārām vai statiskām iekļautajām funkcijām.
  • Moduļi uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev un sunau ir novecojuši un tiks noņemti no Python. 3.13 izlaidums. Noņemtas PyUnicode_Encode* funkcijas.

Avots: opennet.ru

Pievieno komentāru