Shkëputja e gjuhës së programimit Python 3.11

Pas pas një vit zhvillimi, është publikuar një version i rëndësishëm i gjuhës së programimit Python 3.11. Një dege e re do të mbështetet për një vit e gjysmë, pas së cilës do të formohen rregullime për të përballuar dobësitë për tre vitet e ardhshme.

Njëkohësisht, filloi testi alfa i degës Python 3.12 (sipas një grafiku të ri zhvillimi, puna mbi degen e re fillon pesë muaj para publikimit të degës së mëparshme dhe arrin fazën e testeve alfa njëherësh me publikimin e radhës). Dega Python 3.12 do të jetë në fazën e publikimeve alfa për shtatë muaj, gjatë së cilave do të shtohen funksionalitete të reja dhe do të korrigjohen defekte. Pas kësaj, për tre muaj do të zhvillohet testi i versioneve beta, gjatë të cilit shtimi i funksionaliteteve të reja do të ndalohet dhe gjithë vëmendja do t'i kushtohet rregullimeve të defekteve. Dy muajt e fundit para publikimit, dega do të jetë në fazën e kandidatëve për publikim, ku do të kryhet stabilizimi përfundimtar.

Mes risive të sjella në Python 3.11 janë:

  • ËshtĂ« bĂ«rĂ« njĂ« punĂ« e madhe nĂ« optimizimin e performancĂ«s. Dega e re pĂ«rfshin ndryshime qĂ« lidhen me pĂ«rshpejtimin dhe implementimin inline tĂ« thirrjeve tĂ« funksioneve, aplikimin e interpretimeve tĂ« shpejta pĂ«r operacionet tipike (x+x, x*x, x-x, a[i], a[i] = z, f(arg), C(arg), o.method(), o.attr = z, *seq), si dhe optimizime tĂ« pĂ«rgatitura nga projektet Cinder dhe HotPy. NĂ« varĂ«si tĂ« llojit tĂ« ngarkesĂ«s, Ă«shtĂ« vĂ«rejtur njĂ« rritje e shpejtĂ«sisĂ« sĂ« ekzekutimit tĂ« kodit nga 10-60%. NĂ« mesatare, performanca gjatĂ« kalimit nĂ« grupin e testeve pyperformance Ă«shtĂ« rritur me 25%.

    ËshtĂ« rishikuar mekanizmi i caching tĂ« bytecode, çka ka lejuar tĂ« reduktohet koha e nisjes sĂ« interpretuesit me 10-15%. Objektet me kod dhe bytecode tani shfaqen statikisht nga interpretuesi, çka ka mundĂ«suar pĂ«rjashtimin e fazave tĂ« demarshaling tĂ« bytecode tĂ« nxjerrĂ« nga cache dhe transformimin e objekteve me kod pĂ«r vendosje nĂ« memorie dinamike.

  • Kur shfaqet gjurmimi i thirrjeve nĂ« mesazhet diagnostikuese, Ă«shtĂ« siguruar tregimi i informacionit mbi shprehjen qĂ« shkaktoi gabimin (mĂ« parĂ« ishte ndriçuar vetĂ«m rreshti pa detaje, se cila pjesĂ« e rreshtit ishte shkaku i gabimit). Informacioni i zgjeruar mbi gjurmimin gjithashtu mund tĂ« merret nĂ«pĂ«rmjet API-sĂ« dhe tĂ« pĂ«rdoret pĂ«r tĂ« pĂ«rputhur instrukcionet e veçanta tĂ« bytecode-it me pozita specifike nĂ« kodin burimor, duke pĂ«rdorur metodĂ«n codeobject.co_positions() ose funksionin C API PyCode_Addr2Location(). Ky ndryshim e thjeshton ndjeshĂ«m depurimin e problemeve tĂ« lidhura me objektet e pĂ«rfshira, thirrjet e shumta tĂ« funksioneve dhe shprehjet komplekse aritmetike. Traceback (most recent call last): File «calculation.py», line 54, in result = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division by zero
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r grupet e pĂ«rjashtimeve, duke i dhĂ«nĂ« programit mundĂ«sinĂ« tĂ« gjenerojĂ« dhe tĂ« trajtojĂ« njĂ«kohĂ«sisht disa pĂ«rjashtime tĂ« ndryshme. PĂ«r grupimin e disa pĂ«rjashtimeve dhe thirrjen e tyre sĂ« bashku janĂ« propozuar lloje tĂ« reja pĂ«rjashtimesh ExceptionGroup dhe BaseExceptionGroup, dhe pĂ«r tĂ« ndarĂ« pĂ«rjashtimet e veçanta nga grupi Ă«shtĂ« shtuar shprehja «except*».
  • NĂ« klasĂ«n BaseException Ă«shtĂ« shtuar metoda add_note(), e cila lejon lidhjen e njĂ« shĂ«nimi tekstual me pĂ«rjashtimin, pĂ«r shembull, duke shtuar informacion kontekstual qĂ« nuk Ă«shtĂ« i aksesueshĂ«m gjatĂ« gjenerimit tĂ« pĂ«rjashtimit.
  • ËshtĂ« shtuar njĂ« lloj i veçantĂ« Self, qĂ« pĂ«rfaqĂ«son klasĂ«n e mbyllur aktuale. Self mund tĂ« pĂ«rdoret pĂ«r tĂ« anotuar metodat qĂ« kthejnĂ« njĂ« instancĂ« tĂ« klasĂ«s sĂ« tyre, nĂ« njĂ« mĂ«nyrĂ« mĂ« tĂ« thjeshtĂ« sesa duke pĂ«rdorur TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • ËshtĂ« shtuar njĂ« lloj i veçantĂ« LiteralString, i cili mund tĂ« pĂ«rfshijĂ« vetĂ«m literale string, qĂ« janĂ« tĂ« pajtueshme me llojin LiteralString (dmth. string tĂ« papĂ«rpunuara dhe string me lloj LiteralString, por jo string tĂ« rastĂ«sishme ose tĂ« kombinuara me lloj str). Lloji LiteralString mund tĂ« pĂ«rdoret pĂ«r tĂ« kufizuar kalimin e argumenteve string nĂ« funksione, ku ndonjĂ« zĂ«vendĂ«sim i rastĂ«sishĂ«m i pjesĂ«ve tĂ« string mund tĂ« çojĂ« nĂ« dobĂ«si, pĂ«r shembull, gjatĂ« formimit tĂ« string pĂ«r kĂ«rkesat SQL ose komandat shell. def run_query(sql: LiteralString) -> 
 
 def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query(«SELECT * FROM students») # ok run_query(literal_string) # ok run_query(«SELECT * FROM » + literal_string) # ok run_query(arbitrary_string) # Gabim run_query( # Gabim f»SELECT * FROM students WHERE name = {arbitrary_string}» )
  • ËshtĂ« shtuar lloji TypeVarTuple, i cili lejon pĂ«rdorimin e dhenĂ«ve variativĂ«, ndryshe nga TypeVar qĂ« mbulon jo njĂ« lloj, por njĂ« numĂ«r tĂ« rastĂ«sishĂ«m llojesh.
  • NĂ« bibliotekĂ«n standarde Ă«shtĂ« pĂ«rfshirĂ« moduli tomllib me funksione pĂ«r analizimin e formatit TOML.
  • ËshtĂ« mundĂ«sia pĂ«r tĂ« etiketuar elemente tĂ« veçanta tĂ« fjalorĂ«ve tĂ« tipizuara (TypedDict) me etiketat Required dhe NotRequired pĂ«r tĂ« pĂ«rcaktuar fushat e detyrueshme dhe jo tĂ« detyrueshme (me tĂ« dhĂ«na tĂ« parazgjedhura, tĂ« gjitha fushat e shpallura janĂ« tĂ« detyrueshme pĂ«r t'u mbushur, nĂ«se parametri total nuk Ă«shtĂ« vendosur nĂ« vlerĂ«n False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars"} # OK (fusha year Ă«shtĂ« e opcional) m3: Movie = {"year": 2022} # Gabim, fusha e detyrueshme title nuk Ă«shtĂ« mbushur)
  • NĂ« modulĂ«n asyncio Ă«shtĂ« shtuar klasa TaskGroup me implementimin e menaxherit tĂ« kontekstit asinkron, qĂ« pret pĂ«r pĂ«rfundimin e njĂ« grupi detyrash. Shtimi i detyrave nĂ« grup bĂ«het me metodĂ«n create_task(). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(
)) task2 = tg.create_task(another_coro(
)) print("TĂ« dy detyrat tani janĂ« pĂ«rfunduar.")
  • I Ă«shtĂ« shtuar njĂ« dekorator klasave, metodave dhe funksioneve @dataclass_transform, me tĂ« cilin sistemi i kontrollit tĂ« tipeve statike e interpreton objektin, si kur pĂ«rdoret dekoratori @dataclasses.dataclass. NĂ« shembullin mĂ« poshtĂ«, klasa CustomerModel gjatĂ« kontrollit tĂ« tipeve do tĂ« trajtohet nĂ« pĂ«rputhje me klasĂ«n me dekorator @dataclasses.dataclass, domethĂ«nĂ« si e tillĂ« qĂ« ka metodĂ«n __init__, qĂ« pranon variablat id dhe name. @dataclass_transform() class ModelBase: 
 class CustomerModel(ModelBase): id: int name: str
  • NĂ« shprehjet e rregullta Ă«shtĂ« e mundur tĂ« pĂ«rdoret grupimi atomik ((?>(
)) dhe kvanifikatorĂ«t xhelozĂ« (possessive) (*+, ++, ?+, {m,n}+).
  • ËshtĂ« shtuar opsioni i linjĂ«s sĂ« komandĂ«s «-P» dhe variabla e mjedisit PYTHONSAFEPATH pĂ«r tĂ« çaktivizuar bashkimin automatik nĂ« sys.path tĂ« shtegĂ«ve tĂ« skedarĂ«ve potencialisht tĂ« rrezikshĂ«m.
  • Signifikativisht Ă«shtĂ« pĂ«rmirĂ«suar utilitari py.exe pĂ«r platformĂ«n Windows, ku Ă«shtĂ« implementuar mbĂ«shtetje pĂ«r sintaksĂ«n «-V:/» pĂ«rveç «-.».
  • ShumĂ« makro nĂ« C API janĂ« transformuar nĂ« funksione tĂ« zakonshme ose inline statike.
  • Modulet uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev dhe sunau janĂ« shpallur tĂ« plogĂ«shta dhe do tĂ« hiqen nĂ« lĂ«shimin e Python 3.13. Funksionet PyUnicode_Encode* janĂ« hequr.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster