Lëshimi i gjuhës së programuese Python 3.10

Pas një viti zhvillimi, është paraqitur një lëshim i rëndësishëm i gjuhës së programuese Python 3.10. Kjo degë do të mbështetet për njëzet muaj, pas së cilës do të formohen rregullime për disa vite të tjera për të hequr dobësitë.

Njëkohësisht ka filluar testimi alfa i degës Python 3.11 (sipas skedarit të ri të zhvillimit, puna mbi degën e re fillon pesë muaj para lëshimit të degës së mëparshme dhe në momentin e lëshimit të radhës arrin në fazën e testimit alfa). Dega Python 3.11 do të jetë në fazën e lëshimeve alfa për shtatë muaj, gjatë të cilëve do të shtohen mundësi të reja dhe do të rregullohen defekte. Pas kësaj, do të ketë një periudhë prej tre muajsh për testimin e versioneve beta, gjatë së cilës do të ndalohet shtimi i mundësive të reja dhe përqendrimi do të jetë në rregullimin e defekteve. Dy muajt e fundit para lëshimit, dega do të jetë në fazën e kandidatëve për lëshim, ku do të kryhet stabilizimi i fundit.

Ndër novacionet e shtuar në Python 3.10 janë:

  • JanĂ« realizuar operatorĂ«t «match» dhe «case» pĂ«r pĂ«rputhjen me modelin, tĂ« cilĂ«t lejojnĂ« pĂ«rmirĂ«simin e lexueshmĂ«risĂ« sĂ« kodit, thjeshtimin e pĂ«rputhjes sĂ« objekteve tĂ« rastit Python dhe rritjen e qĂ«ndrueshmĂ«risĂ« sĂ« kodit pĂ«rmes mundĂ«sisĂ« sĂ« kontrollit tĂ« avancuar tĂ« tipeve. Realizimi nĂ« shumĂ« mĂ«nyra i ngjan operatorit «match» tĂ« ofruar nga gjuhĂ«t Scala, Rust dhe F#, i cili bĂ«n krahasimin e rezultatit tĂ« ekzekutimit tĂ« shprehjes sĂ« caktuar me njĂ« listĂ« modelesh, tĂ« renditur nĂ« blloqet bazuar nĂ« operatorin «case».

    def http_error(status): match status: case 400: return «Kërkesë e gabuar» case 401|403|404: return «Nuk lejohet» case 418: return «Jam një teapot» case _: return «Diçka tjetër»

    Ka mundësi për të shpërbërë objekte, tuple, lista dhe sekuenca të rastësishme për lidhjen e variablave në bazë të vlerave ekzistuese. Lejohet përcaktimi i shablloneve të ngulitura, përdorimi i kushteve shtesë "nëse" në shabllon, aplikimi i maskave ("[x, y, *rest]"), mapimi i lidhjeve çelës/vlerë (për shembull, {"bandwidth": b, "latency": l} për të nxjerrë vlerat "bandwidth" dhe "latency" nga një fjalor), nxjerrja e nënshablloneve (operatori ":=") dhe përdorimi i konstantave të emëruara në shabllon. Në klasa është e mundur të konfigurohet sjellja gjatë përputhjes me metodën "__match__()".

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origjina") case Point(0, y): print(f"Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Diku tjetër") case _: print("Nuk është një pikë") match point: case Point(x, y) if x == y: print(f"Y=X në {x}") case Point(x, y): print(f"Nuk është në diagonale") RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print("Shoh të kuqe!") case GREEN: print("Bar është i gjelbër") case BLUE: print("Jam duke u ndier keq :( ")

  • ËshtĂ« ofruar mundĂ«sia pĂ«r tĂ« pĂ«rdorur kllapa tĂ« rrethuar nĂ« operatorin with pĂ«r tĂ« shpĂ«rndarĂ« pĂ«rcaktimin e koleksioneve tĂ« menaxherĂ«ve tĂ« kontekstit nĂ« disa rreshta. NĂ« kĂ«tĂ« pĂ«rfshihet leja pĂ«r tĂ« lĂ«nĂ« njĂ« presje pas menaxherit tĂ« fundit tĂ« kontekstit nĂ« grup: with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): 

  • ËshtĂ« pĂ«rmirĂ«suar informimi mbi vendndodhjen nĂ« kod tĂ« gabimeve qĂ« lidhen me kllapat e hapura dhe thonjĂ«zat nĂ« literat string. PĂ«r shembull, nĂ« rastin e njĂ« kllape tĂ« hapur, nĂ« vend qĂ« tĂ« informohet pĂ«r njĂ« gabim sintaksor nĂ« pasardhĂ«sin e saj, treguesi tani thekson kllapĂ«n e hapur dhe informon pĂ«r mungesĂ«n e bllokut tĂ« mbyllur. File "example.py", line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: ‘{‘ nuk u mbyll kurrĂ«

    Janë shtuar mesazhe të specializuara për gabimet sintaksore: mungesa e simbolit ":" para bllokut dhe në fjalorë, mosshënjimi i tuple me kllapa, mungesa e presjeve në lista, specifikimi i bllokut "try" pa "except" dhe "finally", përdorimi i "=" në vend të "==" në krahasime, specifikimi i *-shprehjeve në f-tringje. Për më tepër, është siguruar shënimi i gjithë shprehjes problematike, dhe një informim më i qartë mbi kontekstin e gabimeve që lidhen me renditjen e gabuar të hapësirave. >>> def foo(): ... if lel: ... x = 2 File "", line 3 x = 2 ^ IndentationError: pritej një bllok i indentuar pas deklaratës 'if' në line 2

    Në gabimet që shkaktohen nga shkrimi i gabuar të emrave të atributeve dhe variablave në funksion, është siguruar dalja e një rekomandimi me emrin e saktë. >>> collections.namedtoplo Traceback (most recent call last): File "", line 1, in AttributeError: moduli 'collections' nuk ka atribut 'namedtoplo'. A dëshiron të thua: namedtuple?

  • PĂ«r mjetet e debagimit dhe profiluesit Ă«shtĂ« siguruar shĂ«nimi nĂ« ngjarjet e gjurmimit tĂ« numrave tĂ« saktĂ« tĂ« rreshtave tĂ« kodit tĂ« ekzekutuar.
  • ËshtĂ« shtuar konfigurimi sys.flags.warn_default_encoding pĂ«r tĂ« nxjerrĂ« njĂ« paralajmĂ«rim mbi gabime tĂ« mundshme lidhur me pĂ«rpunimin nĂ« TextIOWrapper dhe open() tĂ« skedave nĂ« kodimin UTF-8 pa specifikuar qartĂ« opsionin 'encoding="utf-8"' (me tĂ« drejtĂ« pĂ«rdoret kodimi ASCII). Gjithashtu, nĂ« lĂ«shimin e ri Ă«shtĂ« ofruar mundĂ«sia e specifikimit tĂ« vlerĂ«s 'encoding="locale"' pĂ«r tĂ« vendosur kodimin nĂ« bazĂ« tĂ« lokalitetit aktual.
  • NĂ« modulatin typing, i cili ofron mjete pĂ«r pĂ«rcaktimin e anotarive tĂ« tipeve, Ă«shtĂ« shtuar njĂ« operator i ri, i cili lejon pĂ«rdorimin e sintaksĂ«s "X | Y" pĂ«r tĂ« zgjedhur njĂ« nga tipet (tipi X ose tipi Y). def square(number: int | float) -> int | float: return number ** 2 ekvivalent me konstruktin mĂ« herĂ«t tĂ« mbĂ«shtetur: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • NĂ« modulatin typing Ă«shtĂ« shtuar operatori Concatenate dhe variabla ParamSpec, tĂ« cilat lejojnĂ« kalimin e informacionit shtesĂ« pĂ«r verifikimin statik tĂ« tipeve kur pĂ«rdoret Callable. NĂ« modulatin typing gjithashtu janĂ« shtuar vlera speciale TypeGuard pĂ«r anotarimin e funksioneve tĂ« mbrojtjes sĂ« tipeve dhe TypeAlias pĂ«r pĂ«rcaktimin e qartĂ« tĂ« pseudonimit tĂ« tipit. StrCache: TypeAlias = 'Cache[str]' # njĂ« pseudonim i tipit
  • Funksioni zip() implementon njĂ« flag opsionale "strict", e cila, kur specifikohet, siguron kontrollin e gjatĂ«si sĂ« njĂ«jtĂ« tĂ« argumenteve qĂ« po iterohen. >>> list(zip((‘a’, ‘b’, ‘c’), (1, 2, 3), strict=True)) [(‘a’, 1), (‘b’, 2), (‘c’, 3)] >>> list(zip(range(3), [‘fee’, ‘fi’, ‘fo’, ‘fum’], strict=True)) Traceback (most recent call last): 
 ValueError: zip() argument 2 Ă«shtĂ« mĂ« e gjatĂ« se argument 1
  • Sot janĂ« propozuar funksionet e reja tĂ« integruara aiter() dhe anext() me implementimin e analogĂ«ve asinkronĂ« tĂ« funksioneve iter() dhe next().
  • Performanca e konstruktorĂ«ve str(), bytes() dhe bytearray() Ă«shtĂ« rritur me 30-40% gjatĂ« punĂ«s me objekte tĂ« vogla.
  • Numri i operacioneve tĂ« importimit nĂ« modulĂ«n runpy Ă«shtĂ« reduktuar. Komanda “python3 -m emri_i_modulit” tani ekzekutohet nĂ« mesatarisht 1.4 herĂ« mĂ« shpejt pĂ«r shkak tĂ« reduktimit tĂ« moduleve tĂ« importuara nga 69 nĂ« 51.
  • NĂ« instrukcionin LOAD_ATTR Ă«shtĂ« aktivizuar mekanizmi i caching pĂ«r opcode tĂ« veçantĂ«, i cili ka lejuar pĂ«rshpejtimin e punĂ«s me atributet normale deri nĂ« 36%, dhe me slotet deri nĂ« 44%.
  • Kur buildohet Python me opsionin “—enable-optimizations”, tani aktivizohet moda “-fno-semantic-interposition”, e cila lejon, krahasuar me ndĂ«rtimin me opsionin “—enable-shared”, tĂ« pĂ«rshpejtojĂ« punĂ«n e interpretuesit deri nĂ« 30%.
  • NĂ« modulet hashlib dhe ssl Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r OpenSSL 3.0.0 dhe Ă«shtĂ« ndĂ«rprerĂ« mbĂ«shtetje pĂ«r versionet e OpenSSL mĂ« tĂ« vjetra se 1.1.1.
  • Parseri i vjetĂ«r Ă«shtĂ« eliminuar, i cili u zĂ«vendĂ«sua nga parseri PEG (Parsing Expression Grammar) nĂ« degĂ«n e kaluar. Moduli formatter Ă«shtĂ« eliminuar. Nga API asyncio Ă«shtĂ« eliminuar parametri loop. JanĂ« eliminuar metodat, tĂ« cilat ishin shpallur tĂ« vjetra mĂ« parĂ«. Funksionet Py_UNICODE_str*, qĂ« manipulojnĂ« me stringjet Py_UNICODE*, janĂ« eliminuar.
  • Moduli distutils Ă«shtĂ« shpallur i vjetruar, i cili Ă«shtĂ« planifikuar pĂ«r t’u eliminua nĂ« Python 3.12. NĂ« vend tĂ« distutils, rekomandohet pĂ«rdorimi i moduleve setuptools, packaging, platform, shutil, subprocess dhe sysconfig. StrukturĂ«n wstr nĂ« PyUnicodeObject e kaluan nĂ« kategorinĂ« e vjetruar dhe tĂ« planifikuar pĂ«r tu eliminuar.

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