Programmeerimiskeele Python 3.11 väljalase

Pärast aastast arendustööd on avaldatud programmeerimiskeele Python 3.11 märkimisväärne väljalase. Uut haru toetatakse poolteist aastat, seejärel genereeritakse sellele veel kolm ja pool aastat parandusi haavatavuste kõrvaldamiseks.

Samal ajal algas Python 3.12 haru alfatestimine (uue arendusgraafiku kohaselt algab töö uue haruga viis kuud enne eelmise haru väljaandmist ja jõuab alfa testimise faasi järgmise väljalaske ajaks ). Python 3.12 haru on alfaväljaandes seitse kuud, mille jooksul lisatakse uusi funktsioone ja parandatakse vigu. Pärast seda testitakse beetaversioone kolm kuud, mille jooksul on uute funktsioonide lisamine keelatud ning kogu tähelepanu pööratakse vigade parandamisele. Viimased kaks kuud enne väljalaskmist on haru väljalaskekandidaatide staadiumis, mille käigus viiakse läbi lõplik stabiliseerimine.

Python 3.11 uued täiendused hõlmavad järgmist:

  • Jõudluse optimeerimiseks on tehtud märkimisväärset tööd. Uus haru sisaldab muudatusi, mis on seotud funktsioonikutsete kiirendamise ja sisemise juurutamisega, standardsete operatsioonide kiirete tõlgendajate kasutamisega (x+x, x*x, x-x, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), samuti Cinderi ja HotPy projektide poolt koostatud optimeerimised. Sõltuvalt koormuse tüübist suureneb koodi täitmise kiirus 10-60%. Keskmiselt kasvas pyperformance testikomplekti jõudlus 25%.

    Baitkoodi vahemällu salvestamise mehhanism on ümber kujundatud, mis on lühendanud tõlgi käivitusaega 10-15%. Koodi ja baitkoodiga objektid eraldab nüüd tõlk staatiliselt, mis võimaldas kõrvaldada vahemälust ekstraheeritud baitkoodi lahtimõtestamise etapid ja objektide teisendamine dünaamilisse mällu paigutatava koodiga.

  • Diagnostikateadetes kõnejälgede kuvamisel on nüüd võimalik kuvada infot tõrke põhjustanud avaldise kohta (varem oli esile tõstetud ainult rida, täpsustamata, milline rea osa tõrke põhjustas). Laiendatud jälgimisteavet saab hankida ka API kaudu ja kasutada üksikute baitkoodi käskude vastendamiseks lähtekoodi kindlale positsioonile, kasutades meetodit codeobject.co_positions() või C API funktsiooni PyCode_Addr2Location(). Muudatus muudab palju lihtsamaks pesastatud sõnastikuobjektide, mitme funktsiooni väljakutsete ja keerukate aritmeetiliste avaldistega seotud probleemide silumise. Traceback (viimane kõne viimane): fail "calculation.py", rida 54, tulemus = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: jagamine nulliga
  • Lisatud erandite rühmade tugi, mis annab programmile võimaluse genereerida ja töödelda mitut erinevat erandit korraga. Mitme erandi rühmitamiseks ja nende kokku tõstmiseks on pakutud välja uued eranditüübid ExceptionGroup ja BaseExceptionGroup ning rühma üksikute erandite esiletõstmiseks on lisatud avaldis “except*”.
  • Klassi BaseException on lisatud meetod add_note(), mis võimaldab lisada erandile tekstimärkuse, näiteks lisada kontekstipõhist teavet, mis pole erandi tegemisel saadaval.
  • Lisatud spetsiaalne Self-tüüp, mis esindab praegust privaatklassi. Selfi saab kasutada meetodite märkimiseks, mis tagastavad oma klassi eksemplari lihtsamal viisil kui TypeVari kasutamine. klass MyLock: def __enter__(self) -> Self: self.lock() return self
  • Lisati spetsiaalne LiteralString tüüp, mis võib sisaldada ainult stringi literaale, mis ühilduvad tüübiga LiteralString (st tühjad ja LiteralString stringid, kuid mitte suvalised või kombineeritud stringid). Tüüpi LiteralString saab kasutada stringiargumentide funktsioonidele edastamise piiramiseks, stringide osade suvaline asendamine, mis võib põhjustada haavatavusi, näiteks SQL-päringute või shellikäskude jaoks stringide genereerimisel. def run_query(sql: LiteralString) -> ... ... def caller( suvaline_string: str, query_string: LiteralString, tabeli_nimi: LiteralString, ) -> None: run_query("SELECT * FROM õpilastelt") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(suvaline_string) # Viga run_query( # Viga f"SELECT * FROM õpilastest WHERE nimi = {suvaline_string}" )
  • Lisatud on TypeVarTuple tüüp, mis võimaldab erinevalt TypeVarist kasutada muutujate üldisi tüüpe, mis ei hõlma mitte ühte tüüpi, vaid suvalist arvu tüüpe.
  • Standardne teek sisaldab moodulit tomllib koos funktsioonidega TOML-vormingu parsimiseks.
  • Tüüpisõnastike (TypedDict) üksikuid elemente on võimalik märgistada kohustuslike ja valikuliste väljade määramiseks siltidega Required ja NotRequired (vaikimisi on kõik deklareeritud väljad kohustuslikud, kui koguparameetri väärtuseks pole seatud False). klass Film (TypedDict): pealkiri: str aasta: NotRequired[int] m1: Film = {"pealkiri": "Black Panther", "year": 2018} # OK m2: Movie = {"pealkiri": "Tähesõjad" } # OK (aastaväli on valikuline) m3: Film = {“aasta”: 2022} # Viga, nõutav pealkirja väli pole täidetud)
  • Asünkroonse kontekstihalduri juurutusega on asünkroonse kontekstihalduri juurutatud asünkroonse kontekstihalduri juurutusega lisatud klass TaskGroup, mis ootab ülesannete rühma täitmist. Ülesannete lisamine gruppi toimub meetodi create_task() abil. async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(teine_coro(...)) print("Mõlemad ülesanded on nüüd täidetud .")
  • Klasside, meetodite ja funktsioonide jaoks on lisatud @dataclass_transform dekoraator, kui see on määratud, käsitleb staatiline tüübikontrollisüsteem objekti nii, nagu kasutaks dekoraatorit @dataclasses.dataclass. Allolevas näites töödeldakse klassi CustomerModel tüüpide kontrollimisel sarnaselt @dataclasses.dataclass dekoraatoriga klassiga, st. kui meetod __init__, mis aktsepteerib id ja nime muutujaid. @dataclass_transform() klass ModelBase: ... klass CustomerModel(ModelBase): id: int nimi: str
  • Regulaaravaldistesse on lisatud võimalus kasutada aatomite rühmitamist ((?>...)) ja omastavaid kvantoreid (*+, ++, ?+, {m,n}+).
  • Lisatud käsurea valik "-P" ja keskkonnamuutuja PYTHONSAFEPATH, et keelata potentsiaalselt ohtlike failiteede automaatne manustamine saidile sys.path.
  • Windowsi platvormi py.exe utiliiti on oluliselt täiustatud, et toetada lisaks süntaksile "-." süntaksit "-V:/".
  • Paljud C API makrod teisendatakse tavalisteks või staatilisteks reafunktsioonideks.
  • Moodulid uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev ja sunau on aegunud ja need eemaldatakse Pythonis 3.13 vabastamine. PyUnicode_Encode* funktsioonid on eemaldatud.

Allikas: opennet.ru

Lisa kommentaar