Programmeerimiskeele Python 3.12 väljaanne

Aasta kestnud arenduse järel on välja antud märkimisväärne programmijake Python 3.12. Uut haru toetatakse poolteist aastat, millest kolm ja pool aastat võetakse pärast seda kasutusele turvaparanduste tegemiseks.

Samuti algas Python 3.13 haru alpha-testimine, kus on tutvustatud CPython'i ehitamise režiimi, milles puudub interpreteerija globaalne lukustus (GIL, Global Interpreter Lock). Python 3.13 haru on alpha-väljalaskmise faasis seitse kuud, mille jooksul lisatakse uusi võimalusi ja parandatakse vigu (vastavalt uuele arenduskavale algab uue haru töö viie kuu jooksul enne eelmise haru väljaandmist ja jõuab alpha-testimise etappi väljaande hetkeks). Pärast seda kestab kolme kuu jooksul beetaversioonide testimine, mille jooksul uute võimaluste lisamine keelatakse ja kõik tähelepanu suunatakse vigade parandamisele. Viimased kaks kuud enne väljaandmist on haru kandidaadi etapis, kus toimub lõplik stabiliseerimine.

Python 3.12-sse lisatud uudised:

  • F-stringide tõlgendamine on muutunud paindlikumaks (f-eetiketiga vormindamisliitandid), mis on kaotanud palju piiranguid. Näiteks saab nüüd f-stringide sees kasutada kõiki kehtivaid Python'i väljendeid, sealhulgas mitmerealisi väljendeid, kommentaare, tagasiurgu ja escape-järgnevusi Unicode'i jaoks. Lisaks on nüüd sisestrngis lubatud kasutada samu jutumärke, mis on f-stringi raamimiseks (t.ü. sees võib nüüd ka kasutada topeltjutumärke, kui ei minda ühekestele üle). F-stringide vigade teadete teave on paranenud, täpsustades, kus stringis viga tekkis.

    Näiteks Python 3.12-s on lubatud järgmised konstruktsioonid: 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 … ])}')

  • Ressurside tõhususe suurendamiseks toetavad multi-core süsteemid isoleeritud alainterpreteerijaid ja eraldi globaalsete lukustusi (GIL, Global Interpreter Lock) erinevate interpreterite jaoks protsessi sees (CPython võimaldab ühes protsessis korraga käivitada mitmeid interpretereid). Praegusel kujul on see võimalus praegu saadaval ainult C-API kaudu (Python API tugi lisandub järgmise suure arendusharu jooksul).
  • Python-koodis on lisatud toetuse protokoll buffer. Klassid, mis pakuvad meetodit "__buffer__()", võivad nüüd toimida tüüpidena, mis otse töötavad binaarsete andmetega mälu sees.
  • Esitatud on moodul sys.monitoring silumiseks ja profilimiseks, mis võimaldab minimaalsete ressursside kasutamise korral jälgida CPythonis selliseid sündmusi nagu funktsioonikutsed, tagastused, suvaliste koodirestrite täitmine, erandid ja üleminekud.
  • Interpreteris on rakendatud Linuxi kerneli perf alamsüsteemi tugi, mis võimaldab profiilimise ajal tuvastada Python-funktsioonide nimesid perf utiliidi abil (varem määrati jälgimistes ainult C-funktsioonide nimesid).
  • Tõhustatud veateate informatiivsust ja laienenud erandite spekter, mis pakuvad soovitusi süntaksivigade lahendamiseks. Näiteks nüüd kuvatakse soovitused unustatud standardteegi moodulite importimiseks, näidatakse vihjeid 'self.'-prefiksi lisamiseks meetodite puhul, määratakse õigete süntaksite nagu 'import x from y' asemel 'from y import x' jne. sys.version_info NameError: nime 'sys' ei ole määratletud. Kas unustasite 'sys' importida? somethin = blech NameError: nime 'blech' ei ole määratletud. Kas mõtlesite: 'self.blech'? import a.y.z from b.y.z SyntaxError: Kas soovisite kasutada 'from … import …'? from collections import chainmap ImportError: ei saa importida nime 'chainmap' moodulist 'collections'. Kas mõtlesite: 'ChainMap'?
  • Tööd jätkatakse jõudluse optimeerimise osas. Üldine jõudluse kasv, mis tuleneb tehtud optimeerimistest, on hinnatud 5%-le.
    • Kogumisprotsessi on lisatud eksperimentaalne tugi binaaroptimeerijale BOLT, mis suurendab jõudlust 1-5%.
    • Teostatud inline-implementatsioon loendite mõistete jaoks, mis kiirendab loendite töötlemist kuni kaks korda (koodis, kus loendite mõisted on aktiivselt kasutusel, on testid näidanud üldist jõudluse tõusu 11%).
    • Unicode objektide suurust on vähendatud 8–16 baitini.
    • Regulaarsete väljendite töötlused re.sub(), re.subn() ja re.Pattern on kiirendatud.
    • isinstance() kontrollide täitmist on kiiremini tehtud 2–20 korda mõnes protokollis.
    • Asynci paketi jõudlust on oluliselt suurendatud (mõnes testis on täheldatud 75% kiirusetõusu).
    • Asynci.Task klassi loomist on kiirendatud.
    • Funktsioone tokenize.tokenize() ja tokenize.generate_tokens() on kiirendatud oluliselt (mõnes testis 64%).
    • Atribuutide laadimist ja super() meetodi kutset on kiirendatud.
  • Pakutud on uus tihedam tüüpide annotatsiooni süntaks genereeritud klasside ja funktsioonide jaoks. def max[T](args: Iterable[T]) -> T: … class list[T]: def __getitem__(self, index: int, /) -> T: … def append(self, element: T) -> None: …
  • Pakutud on uus meetod tüübi hüüdnime määratlemiseks, kasutades „type” avaldist. type Point = tuple[float, float] type Point[T] = tuple[T, T]
  • Typing moodulisse on lisatud uus dekoraator @override, mis teavitab tüübi kontrollimise süsteeme, et alams klassis olev meetod on mõeldud superklassi meetodi või atribuudi ülekirjutamiseks. Dekoraatorit saab kasutada vigade tuvastamiseks, seoses sellega, et ülekirjutamiseks ette nähtud meetod ei tee seda. class Base: def log_status(self) -> None: … class Sub(Base): @override def log_status(self) -> None: # Ok, ülekirjutab Base.log_status … @override def done(self) -> None: # Tüübi kontrollimise süsteem tuvastab vea …
  • Turvalisuse tõhustamiseks on hashlib sees olevad SHA1, SHA3, SHA2-384, SHA2-512 ja MD5 algoritmide teostused asendatud formaalselt tõendatud variantidega HACL* projektist (sisekandjad rakendatakse ainult siis, kui OpenSSL puudub).
  • CPythonis on rakendatud kaitse virna ületamise eest.
  • Pathlib.Path klassis on toetatud alams klasse.
  • Os moodulis on laiendatud Windowsi platvormi toetust. Näiteks Windowsis töötades on lisatud meetodite os.listdrives(), os.listvolumes() ja os.listmounts() tugi ning os.stat() ja os.lstat() täpsus on paranenud.
  • SQLite3 ja uuid moodulitesse on lisatud käsurida liidesed («python -m sqlite3» ja «python -m uuid»).
  • C-API-sse on lisatud tugi «suutmatu» objektide jaoks, mille jaoks viidete arvu ei loeta.
  • On rakendatud C API ebastabiilse taseme kontseptsioon, mis on mõeldud kasutamiseks silurites, JIT-kompilaatorites ja muudes madala taseme tööriistades.
  • On tehtud vana funktsionaalsuse puhastus.
    • Moodulid asynchat, asyncore, smtpd, imp ja distutils on eemaldatud (distutils moodulit saab kasutada setuptools paketist).
    • C-implementatsioonist on eemaldatud unicode-objektide omadused wstr ja wstr_length.
    • Unittest moodulis on eemaldatud vananenud meetodid.
    • Eemaldatud on vananenud või mittetöötavad funktsioonid, klassid ja meetodid, sealhulgas locale.format(), io.OpenWrapper, ssl.RAND_pseudo_bytes(), ElementTree.Element.copy(), hashlib.pbkdf2_hmac(), gzip.GzipFile jne.
    • Webbrowser moodulis on lõpetatud vanade brauserite toetus, sealhulgas Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird ja Firefox versiooni 36 kuni.
    • Tulevaste optimeerimiste ettevalmistamiseks on muudetud tervete numbrite sisemist esitlemist.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster