Kutulutsidwa kwa chilankhulo cha pulogalamu ya Python 3.8

Patapita chaka ndi theka chitukuko zoperekedwa kumasulidwa kwakukulu kwa chinenero cha pulogalamu Python 3.8. Zosintha zowongolera za nthambi ya Python 3.8 anakonza kumasulidwa mkati mwa miyezi 18. Zowopsa zidzakhazikitsidwa kwa zaka 5 mpaka Okutobala 2024. Zosintha zowongolera za nthambi ya 3.8 zidzatulutsidwa miyezi iwiri iliyonse, ndikumasulidwa koyamba kwa Python 3.8.1 kokonzekera Disembala.

Zina mwazowonjezera zatsopano:

  • thandizo ntchito zogawa m'mawu ovuta. Ndi ":=" wogwiritsa ntchito watsopano, ndizotheka kuchita ntchito zogawira mtengo mkati mwa ziganizo zina, mwachitsanzo, kupewa kuyimba kawiri kawiri mu ziganizo zokhazikika komanso pofotokozera malupu:

    ngati (n := len(a))> 10:
    ...

    pomwe (block := f.read(256)) != ":
    ...

  • thandizo mawu atsopano ofotokozera mfundo za ntchito. Mukamawerengera mikangano pakutanthauzira kwa ntchito, mutha kufotokoza "/" kuti mulekanitse mikangano yomwe ingagawidwe zikhalidwe kutengera momwe zikhalidwe zimatchulidwira panthawi yoyimbira, kuchokera pazokangana zomwe zitha kuperekedwa. mu dongosolo lililonse (zosinthika = mtengo wa syntax) ). Kumbali yothandiza, mawonekedwe atsopanowa amalola kuti ntchito za Python zitsanzire kwathunthu machitidwe a ntchito zomwe zilipo kale mu C, komanso kupewa kumangiriza mayina enieni, mwachitsanzo, ngati dzina la parameter likukonzekera kusinthidwa mtsogolo.

    Mbendera ya "/" ikugwirizana ndi mbendera ya "*" yomwe yawonjezeredwa kale, kulekanitsa zosintha zomwe ntchito yokhayo ya "variable=value" ndiyo ikugwira ntchito. Mwachitsanzo, mu ntchito "def f (a, b, /, c, d, *, e, f):" zosinthika "a" ndi "b" zitha kuperekedwa kokha malinga ndi zomwe zalembedwa. ,
    zosintha “e” ndi “f”, pokhapo pogaŵira “variable=value”, ndi “c” ndi “d” mwanjira iriyonse mwa izi:

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

  • Awonjezedwa C API yatsopano
    kukonza magawo oyambira a Python, kulola kuwongolera kwathunthu zonse kasinthidwe ndi kupereka zipangizo zamakono zochitira zolakwika. API yomwe ikufunsidwa imapangitsa kuti zikhale zosavuta kuyika machitidwe omasulira a Python muzinthu zina za C;

  • Zakhazikitsidwa protocol yatsopano ya Vectorcall kuti mupeze mwachangu zinthu zolembedwa m'chilankhulo cha C. Mu CPython 3.8, mwayi wopita ku Vectorcall ukadali wogwiritsidwa ntchito mkati; kusamutsira ku gulu la ma API opezeka pagulu lakonzedwa mu CPython 3.9;
  • Zowonjezedwa imayitanira ku Runtime Audit Hooks, yomwe imapereka mapulogalamu ndi machitidwe ku Python ndi mwayi wopeza chidziwitso chochepa chokhudza momwe script ikuyendera (mwachitsanzo, mukhoza kutsata kuitanitsa kwa ma modules, kutsegula mafayilo, pogwiritsa ntchito trace), kupeza maukonde, kuthamanga code kudzera exec, eval ndi run_mod);
  • Mu module nyemba kupereka kuthandizira kwa protocol ya Pickle 5, yomwe imagwiritsidwa ntchito popanga zinthu zosawerengeka komanso zochotsa zinthu. Pickle imakulolani kukhathamiritsa kusamutsidwa kwa data yambiri pakati pa njira za Python mumitundu yambiri komanso ma node ambiri pochepetsa kuchuluka kwa ntchito zamakope okumbukira ndikugwiritsa ntchito njira zina zokometsera monga kugwiritsa ntchito ma algorithms ophatikizika a data. Mtundu wachisanu wa protocol ndi wodziwika chifukwa chowonjezera njira yotumizira kunja kwa gulu, momwe deta imatha kufalitsidwa mosiyana ndi mtsinje waukulu wa pickle.
  • Mwachikhazikitso, ndondomeko yachinayi ya protocol ya Pickle imatsegulidwa, yomwe, poyerekeza ndi yachitatu yomwe idaperekedwa kale ndi yosasintha, imalola kuti pakhale ntchito zapamwamba komanso kuchepetsa kukula kwa deta yofalitsidwa;
  • Mu module kulemba Zatsopano zingapo zikuyambitsidwa:
    • Kalasi TypedDict pamagulu ophatikizana omwe chidziwitso chamtundu chimafotokozedwa momveka bwino pa data yolumikizidwa ndi makiyi (“TypedDict('Point2D', x=int, y=int, label=str)").
    • mtundu Zenizeni, zomwe zimakulolani kuti muchepetse parameter kapena kubweza mtengo kuzinthu zingapo zomwe zafotokozedweratu ("Literal['connected', 'disconnected']").
    • Design "Final", zomwe zimapangitsa kufotokozera zamitundu, ntchito, njira ndi makalasi omwe sangasinthidwe kapena kuperekedwanso ("pi: Final[float] = 3.1415926536").
  • Anawonjezera kuthekera kopereka cache kwa mafayilo ophatikizidwa ndi bytecode, osungidwa mumtengo wosiyana wa FS ndikusiyanitsidwa ndi zolemba zomwe zili ndi code. Njira yosungira mafayilo ndi bytecode imayikidwa kudzera pakusintha PYTHONPYCACHEPREFIX kapena kusankha "-X pycache_prefix";
  • Zakhazikitsidwa kuthekera kopanga zomangira zowonongeka za Python zomwe zimagwiritsa ntchito ABI yofanana ndi kumasulidwa, zomwe zimakupatsani mwayi wowonjezera zowonjezera zolembedwa m'chinenero cha SI, zomwe zimapangidwira kumasulidwa kokhazikika, muzomangamanga;
  • f-strings (ma liwu osinthidwa olembedwa ndi 'f') amapereka chithandizo kwa = woyendetsa (mwachitsanzo, "f'{expr=}'"), zomwe zimakulolani kuti mutembenuzire mawu kukhala malemba kuti athetse mosavuta. Mwachitsanzo:

    ››› wosuta = 'eric_idle'
    ››› membala_kuyambira = tsiku(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Mawu "kupitiriza» amaloledwa kugwiritsidwa ntchito mkati mwa block potsiriza;
  • Module yatsopano yawonjezedwa multiprocessing.shared_memory, kulola kugwiritsa ntchito magawo amakumbukidwe omwe amagawana nawo pazosintha zambiri;
  • Pa nsanja ya Windows, kukhazikitsa kwa asyncio kwasunthidwa kuti agwiritse ntchito kalasi Pulogalamu ya ProactorEventLoop;
  • Kuchita kwa malangizo a LOAD_GLOBAL awonjezedwa ndi pafupifupi 40% chifukwa chogwiritsa ntchito makina atsopano osungira zinthu.

Source: opennet.ru

Kuwonjezera ndemanga