Rhyddhau iaith raglennu Python 3.11

Ar ôl blwyddyn o ddatblygiad, mae datganiad sylweddol o iaith raglennu Python 3.11 wedi'i gyhoeddi. Bydd y gangen newydd yn cael ei chefnogi am flwyddyn a hanner, ac wedi hynny am dair blynedd a hanner arall, bydd atebion yn cael eu creu er mwyn dileu gwendidau.

Ar yr un pryd, dechreuodd profion alffa cangen Python 3.12 (yn unol â'r amserlen ddatblygu newydd, mae gwaith ar gangen newydd yn dechrau bum mis cyn rhyddhau'r gangen flaenorol ac yn cyrraedd y cam profi alffa erbyn amser y datganiad nesaf). ). Bydd cangen Python 3.12 mewn datganiad alffa am saith mis, pan fydd nodweddion newydd yn cael eu hychwanegu a bygiau'n cael eu trwsio. Ar ôl hyn, bydd fersiynau beta yn cael eu profi am dri mis, pan fydd ychwanegu nodweddion newydd yn cael ei wahardd a bydd pob sylw yn cael ei roi i drwsio bygiau. Am y ddau fis olaf cyn y rhyddhau, bydd y gangen yn y cam rhyddhau ymgeisydd, pan fydd y sefydlogi terfynol yn cael ei berfformio.

Mae ychwanegiadau newydd i Python 3.11 yn cynnwys:

  • Mae gwaith sylweddol wedi'i wneud i optimeiddio perfformiad. Mae'r gangen newydd yn cynnwys newidiadau sy'n ymwneud â chyflymu a defnyddio galwadau ffwythiant yn fewnol, y defnydd o ddehonglwyr cyflym o weithrediadau safonol (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), yn ogystal ag optimeiddiadau a baratowyd gan y prosiectau Cinder a HotPy. Yn dibynnu ar y math o lwyth, mae cynnydd mewn cyflymder gweithredu cod o 10-60%. Ar gyfartaledd, cynyddodd perfformiad ar y gyfres prawf pyperformance 25%.

    Mae'r mecanwaith caching bytecode wedi'i ailgynllunio, sydd wedi lleihau amser cychwyn y cyfieithydd 10-15%. Mae gwrthrychau â chod a chod beit bellach yn cael eu dyrannu'n statig gan y cyfieithydd, a oedd yn ei gwneud hi'n bosibl dileu'r camau o ddad-marsoli beitcode a dynnwyd o'r storfa a throsi gwrthrychau â chod i'w gosod mewn cof deinamig.

  • Wrth arddangos olion galwadau mewn negeseuon diagnostig, mae bellach yn bosibl arddangos gwybodaeth am y mynegiant a achosodd y gwall (yn flaenorol, dim ond y llinell a amlygwyd heb nodi pa ran o'r llinell a achosodd y gwall). Gellir cael gwybodaeth olrhain estynedig hefyd trwy'r API a'i defnyddio i fapio cyfarwyddiadau cod byte unigol i safle penodol yn y cod ffynhonnell gan ddefnyddio'r dull codeobject.co_positions() neu'r swyddogaeth C API PyCode_Addr2Location(). Mae'r newid yn ei gwneud hi'n llawer haws dadfygio problemau gyda gwrthrychau geiriadur nythu, galwadau aml-swyddogaeth, ac ymadroddion rhifyddeg cymhleth. Olrhain (yr alwad ddiwethaf ddiwethaf): Ffeil "calculation.py", llinell 54, yn y canlyniad = (x / y / z) * (a / b / c) ~~~~~~~~ ZeroDivisionError: rhannu gan sero
  • Ychwanegwyd cefnogaeth i grwpiau eithrio, gan roi'r gallu i'r rhaglen gynhyrchu a phrosesu sawl eithriad gwahanol ar unwaith. Er mwyn grwpio eithriadau lluosog a'u codi gyda'i gilydd, cynigiwyd mathau newydd o eithriadau ExceptionGroup a BaseExceptionGroup, ac mae'r ymadrodd “ac eithrio*” wedi'i ychwanegu i amlygu eithriadau unigol o grŵp.
  • Mae'r dull add_note() wedi'i ychwanegu at y dosbarth BaseException, sy'n eich galluogi i atodi nodyn testun i'r eithriad, er enghraifft, ychwanegu gwybodaeth gyd-destunol nad yw ar gael pan fydd yr eithriad yn cael ei daflu.
  • Ychwanegwyd math Hunan arbennig i gynrychioli'r dosbarth preifat presennol. Gellir defnyddio Self i anodi dulliau sy'n dychwelyd enghraifft o'i ddosbarth mewn ffordd symlach na defnyddio TypeVar. dosbarth MyLock: def __enter__(self) -> Hunan: hunan.lock() dychwelyd hunan
  • Ychwanegwyd math LiteralString arbennig na all gynnwys ond llythrennau llinynnol sy'n gydnaws â'r math LiteralString (h.y., llinynnau noeth a LiteralString, ond nid llinynnau str mympwyol neu gyfun). Gellir defnyddio'r math LiteralString i gyfyngu ar drosglwyddo dadleuon llinynnol i swyddogaethau, amnewid rhannau o linynnau yn fympwyol a all arwain at wendidau, er enghraifft, wrth gynhyrchu tannau ar gyfer ymholiadau SQL neu orchmynion cregyn. def run_query(sql: LiteralString) -> ... ... def caller( mympwyol_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Dim: run_query("SELECT *FROM students") # iawn run_query(literal_string) # ok run_query( "SELECT *FROM" + literal_string) # ok run_query(mympwyol_string) # Gwall run_query( # Gwall f"SELECT *FROM students WHERE name = {{arbitrary_string}" )
  • Mae'r math TypeVarTuple wedi'i ychwanegu, gan ganiatáu defnyddio generig amrywiol, yn wahanol i TypeVar, sy'n cwmpasu nid un math, ond nifer mympwyol o fathau.
  • Mae'r llyfrgell safonol yn cynnwys y modiwl tomllib gyda swyddogaethau ar gyfer dosrannu fformat TOML.
  • Mae'n bosibl marcio elfennau unigol o eiriaduron wedi'u teipio (TypedDict) gyda labeli Gofynnol a NotRequired i bennu meysydd gofynnol a dewisol (yn ddiofyn, mae angen pob maes datganedig os nad yw cyfanswm y paramedr wedi'i osod yn Anwir). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = { "title": "Black Panther", "year": 2018} # OK m2: Movie = { "title": "Star Wars" } # Iawn (mae maes y flwyddyn yn ddewisol) m3: Movie = { “blwyddyn”: 2022} # Gwall, nid yw'r maes teitl gofynnol wedi'i lenwi)
  • Mae'r dosbarth TaskGroup wedi'i ychwanegu at y modiwl asyncio gyda gweithrediad rheolwr cyd-destun asyncronaidd sy'n aros i grŵp o dasgau eu cwblhau. Mae ychwanegu tasgau at grŵp yn cael ei wneud gan ddefnyddio'r dull create_task(). async def main(): cydamseru ag asyncio.TaskGroup() fel tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Mae'r ddwy dasg wedi'u cwblhau nawr .")
  • Ychwanegwyd addurnwr @dataclass_transform ar gyfer dosbarthiadau, dulliau a swyddogaethau, pan nodir hynny, mae'r system wirio math statig yn trin y gwrthrych fel pe bai'n defnyddio'r addurnwr @dataclasses.dataclass. Yn yr enghraifft isod, bydd y dosbarth CustomerModel, wrth wirio mathau, yn cael ei brosesu yn yr un modd â dosbarth gyda'r addurnwr @dataclasses.dataclass, h.y. fel rhai sydd â dull __init__ sy'n derbyn id ac enwi newidynnau. @dataclass_transform() dosbarth ModelBase: ... Class CustomerModel(ModelBase): id: int name: str
  • Mewn mynegiadau rheolaidd, mae'r gallu i ddefnyddio grwpio atomig ((?>...)) a meintolyddion meddiannol (*+, ++, ?+, {m, n}+) wedi'i ychwanegu.
  • Ychwanegwyd opsiwn llinell orchymyn "-P" a newidyn amgylchedd PYTHONSAFEPATH i analluogi ymlyniad awtomatig o lwybrau ffeil a allai fod yn anniogel i sys.path.
  • Mae'r cyfleustodau py.exe ar gyfer platfform Windows wedi'i wella'n sylweddol, gan ychwanegu cefnogaeth i'r gystrawen “-V:”. / " yn ogystal â "- . "
  • Mae llawer o macros yn yr API C yn cael eu trosi'n swyddogaethau mewnol rheolaidd neu statig.
  • Mae'r modiwlau uu, cgi, pibellau, crypt, aifc, talp, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, a sunau wedi'u disodli a byddant yn cael eu dileu yn y Python 3.13 rhyddhau. Wedi dileu swyddogaethau PyUnicode_Encode*.

Ffynhonnell: opennet.ru

Ychwanegu sylw