Pagpagawas sa Python 3.11 programming language

Pagkahuman sa usa ka tuig nga pag-uswag, ang hinungdanon nga pagpagawas sa Python 3.11 programming language na-publish. Ang bag-ong sanga suportahan sulod sa usa ug tunga ka tuig, ug human niini sulod sa laing tulo ug tunga ka tuig, ang mga pag-ayo himoon aron kini mawagtang ang mga kahuyangan.

Sa parehas nga oras, nagsugod ang pagsulay sa alpha sa sanga sa Python 3.12 (sumala sa bag-ong iskedyul sa pag-uswag, ang pagtrabaho sa usa ka bag-ong sanga magsugod lima ka bulan sa wala pa ang pagpagawas sa miaging sanga ug makaabut sa yugto sa pagsulay sa alpha sa oras sa sunod nga pagpagawas. ). Ang sanga sa Python 3.12 anaa sa alpha release sulod sa pito ka bulan, diin ang mga bag-ong feature idugang ug ang mga bug ayohon. Pagkahuman niini, ang mga bersyon sa beta pagasulayan sulod sa tulo ka bulan, diin ang pagdugang sa mga bag-ong bahin idili ug ang tanan nga atensyon ibayad sa pag-ayo sa mga bug. Sa katapusan nga duha ka bulan sa wala pa ang pagpagawas, ang sanga anaa sa yugto sa pagpagawas sa kandidato, diin ang katapusan nga pagpalig-on ipahigayon.

Ang bag-ong mga pagdugang sa Python 3.11 naglakip sa:

  • Mahinungdanon nga trabaho ang nahimo aron ma-optimize ang pasundayag. Ang bag-ong sanga naglakip sa mga pagbag-o nga may kalabutan sa pagpadali ug inline nga pag-deploy sa mga tawag sa function, ang paggamit sa paspas nga mga tighubad sa standard nga mga operasyon (x+x, x*x, x-x, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), ingon man mga optimization nga giandam sa mga proyekto sa Cinder ug HotPy. Depende sa matang sa load, adunay pagtaas sa code execution speed sa 10-60%. Sa aberids, ang performance sa pyperformance test suite misaka sa 25%.

    Ang mekanismo sa pag-cache sa bytecode gidesinyo pag-usab, nga nakapamenos sa oras sa pagsugod sa tighubad sa 10-15%. Ang mga butang nga adunay code ug bytecode karon gigahin sa statically sa tighubad, nga nagpaposible sa pagwagtang sa mga yugto sa unmarshalling bytecode nga gikuha gikan sa cache ug pag-convert sa mga butang nga adunay code aron ibutang sa dinamikong memorya.

  • Kung gipakita ang mga pagsubay sa tawag sa mga mensahe sa diagnostic, posible na karon nga ipakita ang kasayuran bahin sa ekspresyon nga hinungdan sa sayup (kaniadto, ang linya ra ang gipasiugda nga wala’y detalye kung unsang bahin sa linya ang hinungdan sa sayup). Ang gipalapdan nga kasayuran sa pagsubay mahimo usab nga makuha pinaagi sa API ug magamit sa pagmapa sa indibidwal nga mga panudlo sa bytecode sa usa ka piho nga posisyon sa source code gamit ang codeobject.co_positions() nga pamaagi o ang C API function PyCode_Addr2Location(). Ang pagbag-o nagpasayon ​​sa pag-debug sa mga problema sa mga butang nga nested nga diksyonaryo, daghang tawag sa function, ug komplikado nga mga ekspresyon sa aritmetika. Traceback (kataposang tawag sa pinakabag-o): File "calculation.py", linya 54, sa resulta = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division by zero
  • Gidugang nga suporta alang sa mga grupo sa eksepsiyon, nga naghatag sa programa sa katakus sa paghimo ug pagproseso sa daghang lainlaing mga eksepsiyon sa usa ka higayon. Aron magrupo ang daghang mga eksepsiyon ug ipataas kini nga magkauban, ang bag-ong mga tipo sa eksepsiyon nga ExceptionGroup ug BaseExceptionGroup gisugyot, ug ang ekspresyong "gawas*" gidugang aron ipasiugda ang indibidwal nga mga eksepsiyon gikan sa usa ka grupo.
  • Ang add_note() nga pamaagi gidugang sa klase sa BaseException, nga nagtugot kanimo sa pag-attach sa usa ka text note sa eksepsiyon, pananglitan, pagdugang sa impormasyon sa konteksto nga dili magamit kung ang eksepsiyon ilabay.
  • Gidugang ang usa ka espesyal nga tipo sa Kaugalingon aron magrepresentar sa karon nga pribado nga klase. Ang kaugalingon mahimong magamit sa pag-annotate sa mga pamaagi nga nagbalik sa usa ka pananglitan sa klase niini sa mas simple nga paagi kaysa sa paggamit sa TypeVar. klase MyLock: def __enter__(kaugalingon) -> Kaugalingon: self.lock() ibalik ang kaugalingon
  • Gidugang ang usa ka espesyal nga tipo sa LiteralString nga mahimo ra maglakip sa mga literal nga string nga nahiuyon sa tipo sa LiteralString (nga mao, mga hubo nga mga kuwerdas ug mga kuwerdas nga tipo nga LiteralString, apan dili arbitraryo o hiniusa nga mga kuwerdas sa tipo nga str). Ang LiteralString nga tipo mahimong gamiton aron limitahan ang pagpasa sa mga argumento sa string ngadto sa mga gimbuhaton, arbitraryong pag-ilis sa mga bahin sa mga kuwerdas diin mahimong mosangpot sa mga kahuyangan, pananglitan, sa paghimo og mga string para sa SQL query o shell commands. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Wala: run_query("PILI * GIKAN sa mga estudyante") # ok run_query(literal_string) # ok run_query("PILI * GIKAN" + literal_string) # ok run_query(arbitrary_string) # Error run_query(# Error f"PILI * GIKAN sa mga estudyante DIIN ngalan = {arbitrary_string}")
  • Gidugang ang TypeVarTuple type, nga nagtugot sa paggamit sa mga variable generics, dili sama sa TypeVar, nga wala'y usa ka tipo, apan usa ka arbitraryong gidaghanon sa mga tipo.
  • Ang standard nga librarya naglakip sa tomllib module nga adunay mga function alang sa pag-parse sa TOML format.
  • Posible nga markahan ang indibidwal nga mga elemento sa gi-type nga mga diksyonaryo (TypedDict) nga adunay Kinahanglanon ug Dili Kinahanglan nga mga label aron mahibal-an ang gikinahanglan ug opsyonal nga mga natad (sa default, gikinahanglan ang tanan nga gideklarar nga mga field kung ang kinatibuk-ang parameter wala itakda sa False). klase nga Movie(TypedDict): titulo: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (opsyonal ang field sa tuig) m3: Movie = {"year": 2022} # Error, ang gikinahanglan nga field sa titulo wala mapuno)
  • Ang klase sa TaskGroup gidugang sa asyncio module uban ang pagpatuman sa usa ka asynchronous context manager nga naghulat sa usa ka grupo sa mga buluhaton nga makompleto. Ang pagdugang sa mga buluhaton sa usa ka grupo gihimo gamit ang create_task() nga pamaagi. async def main(): async sa asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Ang duha ka buluhaton nahuman na karon .")
  • Gidugang @dataclass_transform decorator alang sa mga klase, mga pamaagi ug mga gimbuhaton, kung gitakda, ang static type checking system nagtratar sa butang nga daw naggamit sa @dataclasses.dataclass decorator. Sa panig-ingnan sa ubos, ang klase sa CustomerModel, kung susihon ang mga tipo, iproseso nga parehas sa usa ka klase nga adunay @dataclasses.dataclass decorator, i.e. ingon nga adunay __init__ nga pamaagi nga modawat sa id ug ngalan nga mga variable. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: str
  • Sa regular nga mga ekspresyon, ang abilidad sa paggamit sa atomic grouping ((?>...)) ug possessive quantifiers (*+, ++, ?+, {m,n}+) gidugang.
  • Gidugang ang "-P" nga opsyon sa command line ug PYTHONSAFEPATH environment variable aron ma-disable ang awtomatik nga pagdugtong sa posibleng dili luwas nga mga agianan sa file ngadto sa sys.path.
  • Ang py.exe utility para sa Windows nga plataporma gipauswag pag-ayo aron suportahan ang "-V:/" syntax dugang sa "-." syntax.
  • Daghang mga macro sa C API ang gi-convert ngadto sa regular o static nga inline nga mga function.
  • Ang uu, cgi, pipe, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, ug sunau modules wala na gamita ug tangtangon sa Python 3.13 nga pagpagawas. Gitangtang ang PyUnicode_Encode* functions.

Source: opennet.ru

Idugang sa usa ka comment