Lëshimi i gjuhës programuese Python 3.8

Pas një viti e gjysmë zhvillimi prezantuar lëshimi i gjuhës kryesore të programimit Python 3.8. Përditësimet korrigjuese për degën Python 3.8 planifikuar lirim brenda 18 muajve. Dobësitë kritike do të rregullohen për 5 vjet deri në tetor 2024. Përditësimet korrigjuese për degën 3.8 do të publikohen çdo dy muaj, me lëshimin e parë korrigjues të Python 3.8.1 të planifikuar për në dhjetor.

Ndër të shtuarat risitë:

  • Mbështetje veprimet e caktimit brenda shprehjeve komplekse. Me operatorin e ri “:=”, është e mundur të kryhen operacione të caktimit të vlerës brenda shprehjeve të tjera, për shembull, për të shmangur thirrjet e funksioneve të dyfishta në deklaratat e kushtëzuara dhe kur përcaktohen unazat:

    nëse (n := len(a)) > 10:
    ...

    ndërsa (blloku := f.lexo(256)) != ":
    ...

  • Mbështetje sintaksë e re për specifikimin e argumenteve të funksionit. Kur numëroni argumentet gjatë përcaktimit të funksionit, tani mund të specifikoni një "/" për të ndarë argumentet që mund t'u caktohen vetëm vlerat bazuar në rendin në të cilin vlerat janë numëruar gjatë thirrjes së funksionit, nga argumentet që mund të caktohen. në çdo rend (variabla=sintaksë e vlerës) ). Nga ana praktike, funksioni i ri lejon funksionet në Python të imitojnë plotësisht sjelljen e funksioneve ekzistuese në C, dhe gjithashtu të shmangin lidhjen me emra të veçantë, për shembull, nëse emri i parametrit planifikohet të ndryshohet në të ardhmen.

    Flamuri "/" plotëson flamurin "*" të shtuar më parë, duke ndarë variablat për të cilat zbatohet vetëm një caktim në formën "variable=value". Për shembull, në funksionin "def f(a, b, /, c, d, *, e, f):" variablat "a" dhe "b" mund të caktohen vetëm sipas renditjes që janë renditur vlerat ,
    variablat “e” dhe “f”, vetëm përmes caktimit “variable=value”, dhe variablat “c” dhe “d” në cilëndo nga mënyrat e mëposhtme:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Shtuar API i ri C
    për të konfiguruar parametrat e inicializimit të Python, duke lejuar kontroll të plotë mbi të gjitha konfigurimi dhe sigurimin e pajisjeve të avancuara për trajtimin e gabimeve. API-ja e propozuar e bën të lehtë futjen e funksionalitetit të interpretuesit Python në aplikacione të tjera C;

  • Zbatuar protokoll i ri Vectorcall për akses më të shpejtë në objektet e shkruara në gjuhën C. Në CPython 3.8, qasja në Vectorcall është ende e kufizuar në përdorim të brendshëm; transferimi në kategorinë e API-ve të aksesueshme publikisht është planifikuar në CPython 3.9;
  • Shtuar thirrjet për Runtime Audit Hooks, të cilat ofrojnë aplikacione dhe korniza në Python me qasje në informacione të nivelit të ulët në lidhje me përparimin e skriptit për të audituar veprimet e kryera (për shembull, mund të gjurmoni importimin e moduleve, hapjen e skedarëve, duke përdorur një gjurmë, aksesimi i prizave të rrjetit, ekzekutimi i kodit përmes exec, eval dhe run_mod);
  • Në modul turshi siguruar mbështetje për protokollin Pickle 5, i përdorur për serializimin dhe deserializimin e objekteve. Pickle ju lejon të optimizoni transferimin e sasive të mëdha të të dhënave midis proceseve të Python në konfigurimet me shumë bërthama dhe me shumë nyje duke reduktuar numrin e operacioneve të kopjimit të memories dhe duke aplikuar teknika shtesë optimizimi, si p.sh. përdorimi i algoritmeve të kompresimit të të dhënave specifike. Versioni i pestë i protokollit është i dukshëm për shtimin e një regjimi transmetimi jashtë brezit, në të cilin të dhënat mund të transmetohen veçmas nga rryma kryesore e turshive.
  • Si parazgjedhje, aktivizohet versioni i katërt i protokollit Pickle, i cili, krahasuar me versionin e tretë të ofruar më parë si parazgjedhje, lejon performancë më të lartë dhe reduktim të madhësisë së të dhënave të transmetuara;
  • Në modul daktilografim Janë prezantuar disa veçori të reja:
    • Klasë TypedDict për grupet asociative në të cilat informacioni i llojit është specifikuar në mënyrë eksplicite për të dhënat e lidhura me çelësat (“TypedDict('Point2D', x=int, y=int, label=str)").
    • Lloj i saktë, i cili ju lejon të kufizoni një parametër ose të ktheni vlerën në disa vlera të paracaktuara ("Literal['lidhur', 'i shkëputur']").
    • ndërtimi "Përfundimtar", e cila bën të mundur përcaktimin e vlerave të variablave, funksioneve, metodave dhe klasave që nuk mund të ndryshohen ose ricaktohen ("pi: Final[float] = 3.1415926536").
  • U shtua aftësia për të caktuar një cache për skedarët e përpiluar me bytecode, të ruajtur në një pemë të veçantë FS dhe të ndarë nga drejtoritë me kod. Rruga për ruajtjen e skedarëve me bytecode vendoset nëpërmjet një ndryshoreje PYTHONPYCACHEPREFIX ose opsioni "-X pycache_prefix";
  • Zbatuar aftësia për të krijuar ndërtime të korrigjimit të Python që përdorin një ABI identike me versionin, i cili ju lejon të ngarkoni shtesat e shkruara në gjuhën SI, të përpiluara për lëshime të qëndrueshme, në ndërtimet e korrigjimit;
  • f-strings (literale të formatuara të parashtesuara me 'f') ofrojnë mbështetje për operatorin = (për shembull, "f'{expr=}'"), i cili ju lejon të konvertoni një shprehje në tekst për korrigjim më të lehtë. Për shembull:

    ››› përdorues = 'eric_idle'
    ››› Member_since = datë (1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' Member_since=datetime.date(1975, 7, 31)"

  • Shprehje "vazhdoj» lejohet të përdoret brenda një blloku më në fund;
  • Moduli i ri u shtua multiprocessing.shared_memory, duke lejuar përdorimin e segmenteve të kujtesës së përbashkët në konfigurimet e shumë proceseve;
  • Në platformën Windows, zbatimi asyncio është zhvendosur për të përdorur klasën ProactorEventLoop;
  • Performanca e instruksionit LOAD_GLOBAL është rritur me afërsisht 40% për shkak të përdorimit të një mekanizmi të ri për ruajtjen e kodit të objektit.

Burimi: opennet.ru

Shto një koment