Eldono de la programlingvo Python 3.11

Post jaro da evoluo, la signifa eldono de la programlingvo Python 3.11 estis publikigita. La nova branĉo estos subtenata dum unu kaj duono jaro, post kiu dum aliaj tri jaroj kaj duono, korektoj estos generitaj por ke ĝi eliminu vundeblecojn.

Samtempe komenciĝis alfa-testado de la branĉo Python 3.12 (laŭ la nova disvolva horaro, laboro pri nova branĉo komenciĝas kvin monatojn antaŭ la liberigo de la antaŭa branĉo kaj atingas la alfa-testan stadion en la tempo de la venonta eldono. ). La branĉo Python 3.12 estos en alfa-eldono dum sep monatoj, dum kiuj novaj funkcioj estos aldonitaj kaj cimoj riparitaj. Post ĉi tio, beta-versioj estos testitaj dum tri monatoj, dum kiuj aldoni novajn funkciojn estos malpermesita kaj la tuta atento estos pagita por ripari erarojn. Dum la lastaj du monatoj antaŭ la liberigo, la branĉo estos en la eldonkandidata stadio, ĉe kiu fina stabiligo estos farita.

Novaj aldonoj al Python 3.11 inkluzivas:

  • Grava laboro estis farita por optimumigi rendimenton. La nova branĉo inkludas ŝanĝojn ligitajn al akcelo kaj enlinia deplojo de funkciovokoj, la uzon de rapidaj interpretistoj de normaj operacioj (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), kaj ankaŭ optimumojn preparitajn de la projektoj Cinder kaj HotPy. Depende de la speco de ŝarĝo, estas pliiĝo en koda ekzekutrapideco de 10-60%. Averaĝe, rendimento sur la pyperformance-test-serio pliiĝis je 25%.

    La bajtkoda kaŝmemormekanismo estis restrukturita, kiu reduktis la interpretiston lanĉan tempon je 10-15%. Objektoj kun kodo kaj bajtokodo nun estas statike asignitaj fare de la interpretisto, kio ebligis elimini la stadiojn de senmarŝo de bajtokodo ĉerpita el la kaŝmemoro kaj konvertado de objektoj kun kodo por esti metita en dinamikan memoron.

  • Kiam oni montras alvospurojn en diagnozaj mesaĝoj, nun eblas montri informojn pri la esprimo kiu kaŭzis la eraron (antaŭe, nur la linio estis elstarigita sen detaligi kiu parto de la linio kaŭzis la eraron). Plilongigitaj spurinformoj ankaŭ povas esti akiritaj per la API kaj uzataj por mapi individuajn bajtkodajn instrukciojn al specifa pozicio en la fontkodo uzante la codeobject.co_positions() metodon aŭ la C API-funkcion PyCode_Addr2Location(). La ŝanĝo multe pli facilas sencimigi problemojn kun nestitaj vortaraj objektoj, multoblaj funkciovokoj kaj kompleksaj aritmetikaj esprimoj. Spuro (plej lastatempa voko lasta): Dosiero "calculation.py", linio 54, en rezulto = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: divido per nulo
  • Aldonita subteno por esceptogrupoj, donante al la programo la kapablon generi kaj prilabori plurajn malsamajn esceptojn samtempe. Por grupigi plurajn esceptojn kaj kunigi ilin, novaj esceptotipoj ExceptionGroup kaj BaseExceptionGroup estis proponitaj, kaj la esprimo "krom*" estis aldonita por reliefigi individuajn esceptojn de grupo.
  • La metodo add_note() estis aldonita al la klaso BaseException, permesante al vi alfiksi tekstan noton al la escepto, ekzemple, aldonante kuntekstan informon, kiu ne disponeblas kiam la escepto estas ĵetita.
  • Aldonita speciala Memtipo por reprezenti la nunan privatan klason. Self povas esti uzata por komenti metodojn, kiuj resendas ekzemplon de ĝia klaso en pli simpla maniero ol uzi TypeVar. klaso MyLock: def __enter__(self) -> Self: self.lock() return self
  • Aldonita speciala LiteralString-tipo, kiu povas nur inkluzivi ĉenvortaĵojn, kiuj estas kongruaj kun la tipo LiteralString (t.e., nudaj kaj LiteralString ĉenoj, sed ne arbitraj aŭ kombinitaj ĉenoj). La tipo LiteralString povas esti uzata por limigi la transdonon de ĉenaj argumentoj al funkcioj, arbitra anstataŭigo de partoj de ĉenoj en kiuj povas konduki al vundeblecoj, ekzemple, kiam oni generas ĉenojn por SQL-demandoj aŭ ŝelkomandoj. def run_query(sql: LiteralString) -> ... ... def caller( arbitra_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Neniu: run_query("SELECT * FROM Students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Eraro run_query( # Eraro f"SELECT * FROM studentoj WHERE nomo = {arbitrary_string}" )
  • La TypeVarTuple-tipo estis aldonita, permesante la uzon de variaj generikoj, male al TypeVar, kiuj kovras ne unu tipon, sed arbitran nombron da tipoj.
  • La norma biblioteko inkluzivas la tomllib-modulon kun funkcioj por analizi la TOML-formaton.
  • Eblas marki individuajn elementojn de tajpitaj vortaroj (TypedDict) per etikedoj Required kaj NotRequired por determini postulatajn kaj laŭvolajn kampojn (defaŭlte, ĉiuj deklaritaj kampoj estas postulataj se la totala parametro ne estas agordita al False). klaso Filmo (TypedDict): title: str jaro: NotRequired[int] m1: Filmo = {"title": "Nigra Pantero", "jaro": 2018} # OK m2: Filmo = {"title": "Stelmilito" } # Bone (la jaro-kampo estas nedeviga) m3: Filmo = {“jaro”: 2022} # Eraro, la postulata titolkampo ne estas plenigita)
  • La TaskGroup-klaso estis aldonita al la asincmodulo kun la efektivigo de nesinkrona kunteksta administranto, kiu atendas ke grupo de taskoj kompletiĝos. Aldono de taskoj al grupo estas farita per la metodo create_task(). async def main(): async kun asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(alia_koro(...)) print("Ambaŭ taskoj finiĝis nun .")
  • Aldonita @dataclass_transform dekoraciisto por klasoj, metodoj kaj funkcioj, kiam specifite, la statika tipo-kontrolsistemo traktas la objekton kvazaŭ uzante la @dataclasses.dataclass dekoraciiston. En la malsupra ekzemplo, la klaso CustomerModel, kiam oni kontrolas tipojn, estos procesita simile al klaso kun la dekoraciisto @dataclasses.dataclass, t.e. kiel havi __init__ metodon kiu akceptas id kaj nomvariabloj. @dataclass_transform() klaso ModelBase: … klaso CustomerModel(ModelBase): id: int nomo: str
  • En regulaj esprimoj, la kapablo uzi atomgrupigon ((?>...)) kaj posedajn kvantigilojn (*+, ++, ?+, {m,n}+) estis aldonita.
  • Aldonita "-P" komandlinia opcio kaj PYTHONSAFEPATH mediovariablo por malŝalti aŭtomatan alligitecon de eble nesekuraj dosiervojoj al sys.path.
  • La ilo py.exe por la Vindoza platformo estis signife plibonigita, aldonante subtenon por la sintakso "-V:". / " Aldone al "- . "
  • Multaj makrooj en la C API estas konvertitaj en regulajn aŭ senmovajn enliniajn funkciojn.
  • La uu, cgi, pipoj, kripto, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, kaj sunau-moduloj estis malrekomenditaj kaj estos forigitaj en la Python 3.13 eldono. Forigitaj funkcioj PyUnicode_Encode*.

fonto: opennet.ru

Aldoni komenton