Rilaxx tal-lingwa ta 'programmar Python 3.11

Wara sena ta 'żvilupp, ġie ppubblikat rilaxx sinifikanti tal-lingwa ta' programmar Python 3.11. Il-fergħa l-ġdida se tkun appoġġjata għal sena u nofs, u wara se jiġu ffurmati irqajja b'vulnerabbiltajiet għaliha għal tliet snin u nofs oħra.

Fl-istess ħin, beda l-ittestjar alfa tal-fergħa Python 3.12 (skond l-iskeda l-ġdida tal-iżvilupp, ix-xogħol fuq fergħa ġdida jibda ħames xhur qabel ir-rilaxx tal-fergħa preċedenti u jilħaq l-istadju tal-ittestjar alfa saż-żmien tar-rilaxx li jmiss ). Il-fergħa Python 3.12 se tkun f'rilaxxi alfa għal seba 'xhur, li matulhom se jiżdiedu karatteristiċi ġodda u l-bugs se jiġu rranġati. Wara dan, il-verżjonijiet beta se jiġu ttestjati għal tliet xhur, li matulhom iż-żieda ta 'karatteristiċi ġodda se tkun ipprojbita u se tingħata l-attenzjoni kollha għall-iffissar tal-bugs. L-aħħar xahrejn qabel ir-rilaxx, il-fergħa tkun fl-istadju tal-kandidat għar-rilaxx, fejn se titwettaq l-istabbilizzazzjoni finali.

Żidiet ġodda f'Python 3.11 jinkludu:

  • Sar xogħol sinifikanti biex jiġi ottimizzat il-prestazzjoni. Il-fergħa l-ġdida tinkludi bidliet relatati mal-aċċelerazzjoni u l-iskjerament inline ta’ sejħiet ta’ funzjoni, l-użu ta’ interpreti veloċi ta’ operazzjonijiet tipiċi (x+x, x*x, xx, a[i], a[i] = z, f( arg) C( arg), o.method(), o.attr = z, *seq), kif ukoll ottimizzazzjonijiet ippreparati mill-proġetti Cinder u HotPy. Skont it-tip ta 'tagħbija, hemm żieda fil-veloċità tal-eżekuzzjoni tal-kodiċi b'10-60%. Bħala medja, il-prestazzjoni meta tgħaddi mis-suite tat-test pyperformance żdiedet b'25%.

    Il-mekkaniżmu tal-caching tal-bytecode ġie ddisinjat mill-ġdid, li naqqas il-ħin tal-istartjar tal-interpretu b'10-15%. Oġġetti b'kodiċi u bytecode issa huma allokati statikament mill-interpretu, li għamilha possibbli li jiġu eliminati l-istadji ta 'unmarshaling tal-bytecode estratt mill-cache u l-konverżjoni ta' oġġetti b'kodiċi għat-tqegħid fil-memorja dinamika.

  • Meta jintwerew traċċi ta 'sejħiet f'messaġġi dijanjostiċi, tingħata informazzjoni dwar l-espressjoni li kkawżat l-iżball (preċedentement, il-linja biss kienet enfasizzata mingħajr ma tagħti dettalji dwar liema parti tal-linja kkawżat l-iżball). Informazzjoni estiża ta 'traċċar tista' wkoll tiġi rkuprata permezz tal-API u użata biex timmappa istruzzjonijiet ta 'bytecode individwali għal pożizzjoni speċifika fil-kodiċi tas-sors bl-użu tal-metodu codeobject.co_positions() jew il-funzjoni PyCode_Addr2Location() C API. Il-bidla tissimplifika bil-kbir il-problemi ta' debugging assoċjati ma' oġġetti ta' dizzjunarju imnaqqsa, sejħiet ta' funzjonijiet multipli, u espressjonijiet aritmetiċi kumplessi. Traceback (l-aħħar sejħa l-aktar riċenti): File "calculation.py", linja 54, fir-riżultat = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: diviżjoni b'żero
  • Appoġġ miżjud għal gruppi ta 'eċċezzjonijiet, li jagħti lill-programm il-kapaċità li jiġġenera u jipproċessa diversi eċċezzjonijiet differenti fl-istess ħin. Tipi ġodda ta' eċċezzjonijiet ExceptionGroup u BaseExceptionGroup huma proposti biex jiġbru flimkien diversi eċċezzjonijiet u l-invokazzjoni konġunta tagħhom, u l-espressjoni "ħlief*" hija miżjuda għal eċċezzjonijiet separati minn grupp.
  • Il-metodu add_note() ġie miżjud mal-klassi BaseException, li jippermettilek tehmeż nota ta' test mal-eċċezzjoni, pereżempju, biex iżżid informazzjoni kuntestwali mhux disponibbli fiż-żmien li ntrefgħet l-eċċezzjoni.
  • Ġie miżjud tip speċjali Self biex jirrappreżenta l-klassi privata attwali. Self jista 'jintuża biex jannota metodi li jirritornaw istanza tal-klassi tagħhom b'mod aktar sempliċi milli tuża TypeVar. klassi MyLock: def __enter__(self) -> Self: self.lock() return self
  • Ġie miżjud tip speċjali LiteralString li jista’ jinkludi biss litterali ta’ string li huma kompatibbli mat-tip LiteralString (jiġifieri strings vojta u strings tat-tip LiteralString, iżda mhux strings arbitrarji jew magħquda tat-tip str). It-tip LiteralString jista 'jintuża biex jillimita l-mogħdija ta' argumenti ta 'sekwenza għal funzjonijiet, is-sostituzzjoni arbitrarja ta' partijiet ta 'kordi li fihom tista' twassal għal vulnerabbiltajiet, pereżempju, meta tiġġenera kordi għal mistoqsijiet SQL jew kmandi tal-qoxra. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Xejn: 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 = {arbitrary_string}" )
  • It-tip TypeVarTuple ġie miżjud, li jippermetti l-użu ta 'ġeneriċi varjabbli, b'differenza TypeVar, li jkopri mhux tip wieħed, iżda numru arbitrarju ta' tipi.
  • Il-librerija standard tinkludi l-modulu tomllib b'funzjonijiet għall-parsing tal-format TOML.
  • Il-kapaċità li jiġu mmarkati elementi individwali ta' dizzjunarji ittajpjati (TypedDict) bil-marki Required u NotRequired hija pprovduta biex jiġu ddeterminati oqsma meħtieġa u fakultattivi (b'mod awtomatiku, l-oqsma kollha ddikjarati huma meħtieġa jekk il-parametru totali ma jkunx issettjat għal Falz). klassi Movie(TypedDict): title: str sena: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (il-qasam tas-sena huwa fakultattiv) m3: Film = {"sena": 2022} # Żball, il-qasam tat-titlu meħtieġ ma kienx imtela)
  • Il-klassi TaskGroup ġiet miżjuda mal-modulu asyncio bl-implimentazzjoni ta 'maniġer tal-kuntest asinkronu li jistenna li l-grupp ta' ħidma jitlesta. Iż-żieda tal-kompiti ma' grupp isir bl-użu tal-metodu create_task(). async def main(): async ma asyncio.TaskGroup() bħala tg: task1 = tg.create_task(some_coro(…)) task2 = tg.create_task(another_coro(…)) print("Iż-żewġ kompiti tlestew issa.")
  • Miżjud klassi, metodu, u dekoratur tal-funzjoni @dataclass_transform, meta speċifikat, il-kontrollur tat-tip statiku jittratta l-oġġett bħallikieku juża d-dekoratur @dataclasses.dataclass. Fl-eżempju hawn taħt, il-klassi CustomerModel se tiġi ċċekkjata bit-tip bħal klassi bid-dekoratur @dataclasses.dataclass, i.e. bħala li għandu metodu __init__ li jippermetti varjabbli id ​​u isem. @dataclass_transform() klassi ModelBase: … klassi CustomerModel(ModelBase): id: int isem: str
  • Żid il-ħila li tuża r-raggruppament atomiku ((?>…)) u kwantifikaturi jealous (possessivi) (*+, ++, ?+, {m,n}+) f'espressjonijiet regolari.
  • Miżjud għażla tal-linja tal-kmand "-P" u varjabbli ambjentali PYTHONSAFEPATH biex tiddiżattiva t-twaħħil awtomatiku ta' mogħdijiet ta' fajls potenzjalment mhux sikuri ma' sys.path.
  • Tejbet b'mod sinifikanti l-utilità py.exe għall-pjattaforma tal-Windows, li issa tappoġġja s-sintassi "-V:". / " minbarra "- . ".
  • Bosta macros fis-C API ġew konvertiti għal funzjonijiet inline normali jew statiċi.
  • Il-moduli uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, u sunau ġew deprecati u se jitneħħew fil-Python 3.13 rilaxx. Tneħħew il-funzjonijiet PyUnicode_Encode*.

Sors: opennet.ru

Żid kumment