Pas një viti zhvillimi, është publikuar një version i rëndësishëm i gjuhës së programimit Python 3.12. Kjo degë do të mbështetet për një vit e gjysmë, pas së cilës do të formohen për rreth tre vjet e gjysmë korrigjime për zgjidhjen e dobësive.
Në të njëjtën kohë ka filluar testimi alfa i degës Python 3.13, në të cilën është futur një modalitet ndërtimi CPython pa bllokimin global të interpretuesit (GIL, Global Interpreter Lock). Dega Python 3.13 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ë korrigjohen defekte (sipas një grafiku të ri zhvillimi, puna mbi degën e re fillon pesë muaj përpara lëshimit të degës paraprake dhe në momentin e lëshimit të radhës arrin në fazën e testimit alfa). Pas kësaj, për tre muaj do të zhvillohet testimi i versioneve beta, gjatë të cilit do të ndalohet shtimi i mundësive të reja dhe të gjithë vëmendja do të përqendrohet në korrigjimin e gabimeve. 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 përfundimtar.
Disa nga novacionet e shtuar në Python 3.12 janë:
- ĂshtĂ« rritur fleksibiliteti i mĂ«nyrĂ«s sĂ« shprehjes sĂ« f-strings (literalĂ«t e formatit me prefiks âfâ), duke lejuar heqjen e shumĂ« kufizimeve. PĂ«r shembull, brenda f-strings tani lejohet tĂ« shprehni çdo shprehje tĂ« pranuar nga Python, duke pĂ«rfshirĂ« shprehje shumĂ«rrreshtore, komente, slashe tĂ« prapĂ«sht, dhe sekuenca evazive pĂ«r Unicode. PĂ«r mĂ« tepĂ«r, brenda vargut tani lejohet ripĂ«rdorimi i tĂ« njĂ«jtave citate si nĂ« rrethimin e f-string (dmth. brenda tani pĂ«rsĂ«ri mund tĂ« pĂ«rdoren citate tĂ« dyfishta, pa kaluar nĂ« ato njĂ«fishta). ĂshtĂ« rritur informativiteti i mesazheve tĂ« gabimeve nĂ« f-strings, tĂ« cilat tani tregojnĂ« vendin e saktĂ« nĂ« varg qĂ« shkaktoi gabimin.
Për shembull, në Python 3.12 lejohet ndërtimi i mëposhtëm: print(f"This is the playlist: {"\n".join(songs)}") print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}") print(f"This is the playlist: {", ".join([ ... 'Take me back to Eden', # My, my, those eyes like fire ... 'Alkaline', # Not acid nor alkaline ... 'Ascensionism' # Take to the broken skies at last ... ])}")
- Për të rritur efikasitetin e përdorimit të burimeve në sisteme me shumë bërthama, është realizuar mbështetje për interpretorë të izoluara dhe bllokime globale të veçanta (GIL, Global Interpreter Lock) për interpretorë të ndryshëm brenda një procesi (CPython lejon në një proces të ekzekutoj disa interpretorë njëkohësisht). Në formën aktuale, kjo mundësi është e disponueshme vetëm përmes C-API (në Python API mbështetje do të jetë në degën e ardhshme të rëndësishme).
- Në kodin Python është shtuar mundësia e përdorimit të protokollit buffer. Klasa që ofrojnë metodën "__buffer__()", tani mund të përdoren si lloje që punojnë drejtpërdrejt me të dhëna binare në memorie.
- ĂshtĂ« propozuar moduli sys.monitoring pĂ«r demostratĂ« dhe profilim, duke lejuar ndjekjen e ngjarjeve nĂ« CPython me shpenzime minimale, si thirrjet, kthimet nga funksionet, ekzekutimi i vargjeve tĂ« rastit tĂ« kodit, pĂ«rjashtimet dhe kalimet.
- Në interpretues është realizuar mbështetje për sistemin e nëndegës Linux perf, duke lejuar identifikimin e emrave të funksioneve Python gjatë profilimit me ndihmën e veglave perf (më parë në gjurmimet e emrave të funksioneve C vetëm identifikoheshin).
- ĂshtĂ« rritur informativiteti i mesazheve tĂ« gabimeve dhe Ă«shtĂ« zgjeruar spektri i pĂ«rjashtimeve qĂ« ofrojnĂ« rekomandime pĂ«r heqjen e gabimeve. PĂ«r shembull, tani jepen rekomandime pĂ«r importimin e moduleve tĂ« harruara tĂ« bibliotekĂ«s standarde, tregohen sugjerime pĂ«r shtimin e prefiksit "self." nĂ« metoda, identifikohet shkrimi "import x from y" nĂ« vend tĂ« "from y import x" etj. sys.version_info NameError: emri âsysâ nuk Ă«shtĂ« i definuar. Keni harruar tĂ« importoni âsysâ? somethin = blech NameError: emri âblechâ nuk Ă«shtĂ« i definuar. Keni dashur tĂ« thoni: âself.blechâ? import a.y.z from b.y.z SyntaxError: A keni dashur tĂ« pĂ«rdorni âfrom ⊠import âŠâ? from collections import chainmap ImportError: nuk mund tĂ« importohet emri âchainmapâ nga âcollectionsâ. Keni dashur tĂ« thoni: âChainMapâ?
- Puna për optimizimin e performancës është vazhduar. Rritja totale e performancës si rezultat i optimizimeve të shtuar është e vlerësuar në 5%.
- Në procesin e ndërtimit është shtuar mbështetje eksperimentale për optimizuesin binar BOLT, i cili rrit performancën nga 1-5%.
- ĂshtĂ« realizuar zhvillimi inline i pĂ«rfshirjeve (comprehensions), duke dyfishuar shpejtĂ«sinĂ« e punĂ«s me pĂ«rfshirjet (pĂ«r kodin qĂ« pĂ«rdor pĂ«rfshirje aktive, testimi ka treguar njĂ« rritje totale tĂ« performancĂ«s prej 11%).
- Janë reduktuar 8-16 byte të madhësisë së objekteve Unicode.
- Janë përshpejtuar operacionet me shprehje të rregullta re.sub(), re.subn() dhe re.Pattern.
- Nga 2 deri në 20 herë e përshpejtuar ekzekutimi i kontrollimeve isinstance() për disa protokolle.
- Kapsulimi i paketës asyncio është përmirësuar ndjeshëm (në disa teste është vërejtur një përshpejtim prej 75%).
- Krijimi i klasës asyncio.Task është përshpejtuar.
- Funksionet tokenize.tokenize() dhe tokenize.generate_tokens() janë përshpejtuar ndjeshëm (në disa teste me 64%).
- Ngarkohet atributet dhe thirret metoda super() përshpejtuar.
- Propozohet njĂ« sintaksĂ« e re mĂ« kompakte pĂ«r anotimin e tipeve pĂ«r klasat dhe funksionet e pĂ«rgjithĂ«suara. def max[T](args: Iterable[T]) -> T: ⊠class list[T]: def __getitem__(self, index: int, /) -> T: ⊠def append(self, element: T) -> None: âŠ
- Ofron një mënyrë të re për të përcaktuar aliazhe tipi me anë të shprehjes «type» type Point = tuple[float, float] type Point[T] = tuple[T, T]
- NĂ« modulĂ«n typing Ă«shtĂ« shtuar njĂ« dekorator i ri @override, i cili informon sistemet e kontrollit tĂ« tipeve se metoda nĂ« nĂ«nklasĂ« Ă«shtĂ« e destinuar pĂ«r tĂ« zĂ«vendĂ«suar njĂ« metodĂ« ose atribut nĂ« supĂ«rklasĂ«. Dekoratori mund tĂ« pĂ«rdoret pĂ«r tĂ« identifikuar gabime qĂ« lidhen me njĂ« metodĂ« tĂ« destinuar pĂ«r tĂ« zĂ«vendĂ«suar qĂ« nuk vepron si e tillĂ«. class Base: def log_status(self) -> None: ⊠class Sub(Base): @override def log_status(self) -> None: # MirĂ«, zĂ«vendĂ«son Base.log_status ⊠@override def done(self) -> None: # Sistemi i kontrollit tĂ« tipeve do tĂ« identifikojĂ« njĂ« gabim âŠ
- Në interes të forcimit të sigurisë, implementimet e integruara të algoritmeve SHA1, SHA3, SHA2-384, SHA2-512 dhe MD5 në hashlib janë zëvendësuar me variante formalisht të verifikuara nga projekti HACL* (implementimet e integruara përdoren vetëm nëse OpenSSL mungon).
- Në CPython është realizuar mbrojtja nga mbushja e stack-ut.
- Në klasën pathlib.Path është realizuar mbështetje për nënklasa.
- Në modulën os është zgjeruar mbështetje për platformën Windows. Për shembull, gjatë punës në Windows është shtuar mbështetje për metodat os.listdrives(), os.listvolumes() dhe os.listmounts(), si dhe është përmirësuar saktësia e os.stat() dhe os.lstat().
- Në modulet sqlite3 dhe uuid janë shtuar ndërfaqet e komandave të linjës («python -m sqlite3» dhe «python -m uuid»).
- Në C-API është shtuar mbështetje për objekte 'të pavdekshëm', për të cilat nuk zbatohet numërimi i referencave.
- ĂshtĂ« realizuar koncepti i nivelit tĂ« paqĂ«ndrueshĂ«m tĂ« C API, i destinuar pĂ«r pĂ«rdorim nĂ« debug-erĂ«, JIT-kompilatorĂ« dhe mjete tĂ« tjera me nivel tĂ« ulĂ«t.
- ĂshtĂ« bĂ«rĂ« njĂ« pastrimi i mundĂ«sive tĂ« vjetra.
- Janë fshirë modulët asynchat, asyncore, smtpd, imp dhe distutils (moduli distutils mund të përdoret nga paketa setuptools).
- Shtesat wstr dhe wstr_length janë fshirë nga implementimet C të objekteve unicode.
- Metodat e vjetra janë fshirë në modulën unittest.
- Janë fshirë funksionet, klasat dhe metodat që janë të vjetra ose që nuk funksionojnë siç duhet, duke përfshirë locale.format(), io.OpenWrapper, ssl.RAND_pseudo_bytes(), ElementTree.Element.copy(), hashlib.pbkdf2_hmac(), gzip.GzipFile etj.
- Në modulën webbrowser është ndaluar mbështetje për shfletuesit e vjetra, përfshirë Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird, dhe Firefox deri në versionin 36.
- Në përgatitje për optimizimet e ardhshme, është ndryshuar prezantimi i brendshëm i numrave të tërë.
Burimi: opennet.ru
