Publikimi i gjuhës së programimit Python 3.11

Pas një viti zhvillimi, është publikuar një version i rëndësishëm i gjuhës së programimit Python 3.11. Dega e re do të mbështetet për një vit e gjysmë, pas së cilës për edhe tre vjet e gjysmë do të publikohen përditësime me korrigjime të cenueshmërive.

Njëkohësisht ka nisur edhe testimi alfa i degës Python 3.12 (sipas ciklit të ri të zhvillimit, puna për degën e re fillon pesë muaj përpara publikimit të degës paraardhëse dhe deri në momentin e publikimit të radhës arrin fazën e testimit alfa). Dega Python 3.12 do të qëndrojë në fazën e versioneve alfa për shtatë muaj, gjatë të cilëve do të shtohen funksione të reja dhe do të korrigjohen gabimet. Më pas, për tre muaj do të zhvillohet testimi i versioneve beta, gjatë të cilit shtimi i funksioneve të reja do të ndalohet dhe i gjithë fokusi do të përqendrohet te korrigjimi i gabimeve. Dy muajt e fundit para publikimit, dega do të jetë në fazën release candidate, ku do të kryhet stabilizimi përfundimtar.

Ndër risitë e shtuara në Python 3.11:

  • ËshtĂ« bĂ«rĂ« njĂ« punĂ« e konsiderueshme pĂ«r optimizimin e performancĂ«s. NĂ« degĂ«n e re janĂ« pĂ«rfshirĂ« ndryshime qĂ« lidhen me pĂ«rshpejtimin dhe inline-zgjerimin e thirrjeve tĂ« funksioneve, pĂ«rdorimin e interpretuesve tĂ« shpejtĂ« 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 edhe 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 prej 10-60%. Mesatarisht, performanca gjatĂ« kalimit tĂ« paketĂ«s sĂ« testeve pyperformance Ă«shtĂ« rritur me 25%.

    ËshtĂ« ripunuar mekanizmi i cache-it tĂ« bytecode-it, gjĂ« qĂ« ka bĂ«rĂ« tĂ« mundur uljen e kohĂ«s sĂ« nisjes sĂ« interpretuesit me 10-15%. Objektet e kodit dhe bytecode tani vendosen nĂ« mĂ«nyrĂ« statike nga interpretuesi, çka ka lejuar heqjen e fazave tĂ« demarshalling tĂ« bytecode-it tĂ« marrĂ« nga cache-i dhe tĂ« transformimit tĂ« objekteve tĂ« kodit pĂ«r vendosje nĂ« memorien dinamike.

  • GjatĂ« shfaqjes sĂ« traceback-ut nĂ« mesazhet diagnostikuese, tani paraqitet edhe informacioni pĂ«r shprehjen qĂ« shkaktoi gabimin (mĂ« parĂ« theksohej vetĂ«m rreshti, pa u sqaruar cila pjesĂ« e tij ishte shkaku i gabimit). Informacion mĂ« i detajuar pĂ«r traceback-un mund tĂ« merret edhe pĂ«rmes API-sĂ« dhe tĂ« pĂ«rdoret pĂ«r tĂ« lidhur instruksione tĂ« veçanta tĂ« bytecode-it me pozicionin pĂ«rkatĂ«s nĂ« kodin burimor, duke pĂ«rdorur metodĂ«n codeobject.co_positions() ose funksionin e C API-sĂ« PyCode_Addr2Location(). Ky ndryshim e thjeshton ndjeshĂ«m debugimin e problemeve qĂ« lidhen me objekte tĂ« folezuara tĂ« fjalorĂ«ve, thirrje tĂ« shumta funksionesh dhe shprehje aritmetike komplekse. 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Ă«shtetja pĂ«r grupet e pĂ«rjashtimeve, tĂ« cilat i japin programit mundĂ«sinĂ« tĂ« gjenerojĂ« dhe tĂ« pĂ«rpunojĂ« njĂ«kohĂ«sisht disa pĂ«rjashtime tĂ« ndryshme. PĂ«r grupimin e disa pĂ«rjashtimeve dhe thirrjen e tyre tĂ« pĂ«rbashkĂ«t janĂ« prezantuar llojet e reja tĂ« pĂ«rjashtimeve ExceptionGroup dhe BaseExceptionGroup, ndĂ«rsa pĂ«r tĂ« veçuar pĂ«rjashtime individuale nga grupi Ă«shtĂ« shtuar shprehja «except*».
  • NĂ« klasĂ«n BaseException Ă«shtĂ« shtuar metoda add_note(), e cila lejon bashkĂ«ngjitjen e njĂ« shĂ«nimi tekstual te pĂ«rjashtimi, pĂ«r shembull pĂ«r tĂ« shtuar informacion kontekstual qĂ« nuk ishte i disponueshĂ«m nĂ« momentin e gjenerimit tĂ« pĂ«rjashtimit.
  • ËshtĂ« shtuar tipi special Self, i cili pĂ«rfaqĂ«son klasĂ«n aktuale tĂ« mbyllur. Self mund tĂ« pĂ«rdoret pĂ«r tĂ« anotuar metoda qĂ« kthejnĂ« njĂ« instancĂ« tĂ« klasĂ«s sĂ« tyre, nĂ« njĂ« mĂ«nyrĂ« mĂ« tĂ« thjeshtĂ« sesa kur pĂ«rdoret TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • ËshtĂ« shtuar tipi i veçantĂ« LiteralString, i cili mund tĂ« pĂ«rfshijĂ« vetĂ«m literale vargjesh tĂ« pĂ«rputhshme me tipin LiteralString (pra, vargje tĂ« thjeshta dhe vargje me tipin LiteralString, por jo vargje arbitrare dhe as vargje tĂ« kombinuara me tipin str). Tipi LiteralString mund tĂ« pĂ«rdoret pĂ«r tĂ« kufizuar kalimin e argumenteve tĂ« tipit string te funksionet, ku zĂ«vendĂ«simi arbitrar i pjesĂ«ve tĂ« vargut mund tĂ« çojĂ« nĂ« cenueshmĂ«ri, pĂ«r shembull gjatĂ« formimit tĂ« vargjeve pĂ«r kĂ«rkesa SQL ose komanda shell. def run_query(sql: LiteralString) -> 
 
 def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query(«SELECT * FROM students») # nĂ« rregull run_query(literal_string) # nĂ« rregull run_query(«SELECT * FROM » + literal_string) # nĂ« rregull run_query(arbitrary_string) # Gabim run_query( # Gabim f»SELECT * FROM students WHERE name = {arbitrary_string}» )
  • ËshtĂ« shtuar tipi TypeVarTuple, i cili lejon pĂ«rdorimin e gjenerikĂ«ve variativĂ«, qĂ« ndryshe nga TypeVar mbulojnĂ« jo njĂ« tip tĂ« vetĂ«m, por njĂ« numĂ«r arbitrar tipesh.
  • NĂ« bibliotekĂ«n standarde Ă«shtĂ« pĂ«rfshirĂ« moduli tomllib me funksione pĂ«r analizimin e formatit TOML.
  • ËshtĂ« ofruar mundĂ«sia pĂ«r tĂ« shĂ«nuar elemente tĂ« veçanta tĂ« fjalorĂ«ve tĂ« tipizuar (TypedDict) me etiketat Required dhe NotRequired pĂ«r tĂ« pĂ«rcaktuar fushat e detyrueshme dhe jo tĂ« detyrueshme (si parazgjedhje, tĂ« gjitha fushat e deklaruara janĂ« tĂ« detyrueshme pĂ«r t'u plotĂ«suar, nĂ«se parametri total nuk vendoset nĂ« vlerĂ«n False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {«title»: «Black Panther», «year»: 2018} # NĂ« rregull m2: Movie = {«title»: «Star Wars»} # NĂ« rregull (fusha year Ă«shtĂ« opsionale) m3: Movie = {«year»: 2022} # Gabim, fusha e detyrueshme title nuk Ă«shtĂ« plotĂ«suar)
  • NĂ« modulin asyncio Ă«shtĂ« shtuar klasa TaskGroup me implementimin e njĂ« menaxheri asinkron tĂ« kontekstit, i cili pret pĂ«rfundimin e njĂ« grupi detyrash. Shtimi i detyrave nĂ« grup kryhet 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(«Both tasks have completed now.»)
  • ËshtĂ« shtuar dekoratori pĂ«r klasa, metoda dhe funksione @dataclass_transform, me pĂ«rcaktimin e tĂ« cilit sistemi i kontrollit statik tĂ« tipeve e trajton objektin njĂ«soj si nĂ« rastin e pĂ«rdorimit tĂ« dekoratorit @dataclasses.dataclass. NĂ« shembullin mĂ« poshtĂ«, gjatĂ« kontrollit tĂ« tipeve klasa CustomerModel do tĂ« pĂ«rpunohet nĂ« mĂ«nyrĂ« analoge me njĂ« klasĂ« me dekoratorin @dataclasses.dataclass, pra si njĂ« klasĂ« qĂ« ka metodĂ«n __init__, e cila pranon variablat id dhe name. @dataclass_transform() class ModelBase: 
 class CustomerModel(ModelBase): id: int name: str
  • NĂ« shprehjet e rregullta Ă«shtĂ« shtuar mundĂ«sia pĂ«r tĂ« pĂ«rdorur grupimin atomik ((?>
)) dhe kuantifikatorĂ«t possessive (*+, ++, ?+, {m,n}+).
  • ËshtĂ« shtuar opsioni i rreshtit tĂ« komandĂ«s «-P» dhe ndryshorja e mjedisit PYTHONSAFEPATH pĂ«r tĂ« çaktivizuar shtimin automatik nĂ« sys.path tĂ« shtigjeve tĂ« skedarĂ«ve potencialisht tĂ« pasigurt.
  • ËshtĂ« pĂ«rmirĂ«suar ndjeshĂ«m vegla py.exe pĂ«r platformĂ«n Windows, ku Ă«shtĂ« zbatuar mbĂ«shtetja pĂ«r sintaksĂ«n «-V:/» pĂ«rveç «-.».
  • ShumĂ« makro nĂ« C API janĂ« shndĂ«rruar nĂ« funksione tĂ« zakonshme ose statike inline.
  • Modulet uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev dhe sunau janĂ« shpallur tĂ« vjetruara dhe do tĂ« hiqen nĂ« versionin Python 3.13. JanĂ« hequr funksionet PyUnicode_Encode*.

Burimi: opennet.ru

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