Python 3.8 ծրագրավորման լեզվի թողարկում

Մեկուկես տարի զարգացումից հետո ներկայացված հիմնական ծրագրավորման լեզվի թողարկում Python 3.8. Ուղղիչ թարմացումներ Python 3.8 մասնաճյուղի համար պլանավորված թողարկում 18 ամսվա ընթացքում: Կրիտիկական խոցելիությունները կվերացվեն 5 տարով մինչև 2024 թվականի հոկտեմբերը։ 3.8 մասնաճյուղի ուղղիչ թարմացումները կթողարկվեն երկու ամիսը մեկ, իսկ Python 3.8.1-ի առաջին ուղղիչ թողարկումը նախատեսված է դեկտեմբերին:

Ավելացվածների թվում նորամուծություններ:

  • Աջակցություն հանձնարարական գործողություններ բարդ արտահայտությունների շրջանակներում: Նոր «:=» օպերատորի միջոցով հնարավոր է արժեքների վերագրման գործողություններ կատարել այլ արտահայտությունների ներսում, օրինակ՝ խուսափելու պայմանական հայտարարություններում կրկնակի ֆունկցիայի կանչերից և օղակներ սահմանելիս.

    եթե (n := len(a)) > 10:
    ...

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

  • Աջակցություն նոր շարահյուսություն՝ ֆունկցիայի արգումենտները նշելու համար: Գործառույթի սահմանման ժամանակ արգումենտները թվարկելիս այժմ կարող եք նշել «/»՝ արգումենտները առանձնացնելու համար, որոնց կարող են վերագրել արժեքներ՝ հիմնվելով ֆունկցիայի կանչի ընթացքում արժեքների թվարկման հերթականության վրա, արգումենտներից, որոնք կարող են նշանակվել: ցանկացած կարգով (փոփոխական=արժեքի շարահյուսություն) ): Գործնականում նոր հատկանիշը թույլ է տալիս Python-ի գործառույթներին ամբողջությամբ ընդօրինակել C-ում գոյություն ունեցող ֆունկցիաների վարքագիծը, ինչպես նաև խուսափել կոնկրետ անունների հետ կապվելուց, օրինակ, եթե ապագայում նախատեսվում է փոխել պարամետրի անունը:

    «/» դրոշը լրացնում է նախկինում ավելացված «*» դրոշը՝ առանձնացնելով այն փոփոխականները, որոնց համար կիրառելի է միայն «variable=value» ձևով հանձնարարություն: Օրինակ, «def f(a, b, /, c, d, *, e, f):» ֆունկցիայի մեջ «a» և «b» փոփոխականները կարող են վերագրվել միայն արժեքների թվարկված կարգով: ,
    «e» և «f» փոփոխականները միայն «variable=value» նշանակման միջոցով, և «c» և «d» փոփոխականները հետևյալ եղանակներից որևէ մեկով.

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

  • Ավելացված է նոր C API
    Python-ի սկզբնավորման պարամետրերը կարգավորելու համար՝ թույլ տալով ամբողջական վերահսկողություն բոլորի վրա կոնֆիգուրացիա և սխալների հետ աշխատելու առաջադեմ հարմարություններ: Առաջարկվող API-ն հեշտացնում է Python-ի թարգմանիչի ֆունկցիոնալությունը C այլ հավելվածներում ներդնելը.

  • Իրականացվել է նոր Vectorcall արձանագրություն՝ C լեզվով գրված օբյեկտներին ավելի արագ մուտք գործելու համար: CPython 3.8-ում Vectorcall-ի հասանելիությունը դեռևս սահմանափակված է ներքին օգտագործման համար, CPython 3.9-ում նախատեսված է հանրությանը հասանելի API-ների կատեգորիա տեղափոխում;
  • Ավելացված է զանգեր Runtime Audit Hooks-ին, որոնք Python-ում հավելվածներին և շրջանակներին տրամադրում են ցածր մակարդակի տեղեկատվություն սկրիպտի առաջընթացի մասին՝ կատարված գործողությունները ստուգելու համար (օրինակ՝ կարող եք հետևել մոդուլների ներմուծմանը, բացել ֆայլերը, օգտագործելով հետքը, մուտք գործել ցանցային վարդակներ, գործարկել կոդը exec, eval և run_mod-ի միջոցով);
  • Մոդուլում թթու տրամադրվում է աջակցություն Pickle 5 արձանագրությանը, որն օգտագործվում է օբյեկտների սերիականացման և ապասերիալիզացիայի համար: Pickle-ը թույլ է տալիս օպտիմիզացնել մեծ քանակությամբ տվյալների փոխանցումը Python պրոցեսների միջև բազմամիջուկ և բազմահանգույց կոնֆիգուրացիաներում՝ նվազեցնելով հիշողության պատճենման գործողությունների քանակը և կիրառելով լրացուցիչ օպտիմալացման մեթոդներ, ինչպիսիք են տվյալներին հատուկ սեղմման ալգորիթմների օգտագործումը: Արձանագրության հինգերորդ տարբերակը հատկանշական է հաղորդման տիրույթից դուրս ռեժիմի ավելացմամբ, որի դեպքում տվյալները կարող են փոխանցվել թթու վարունգի հիմնական հոսքից առանձին:
  • Լռելյայնորեն ակտիվացված է Pickle արձանագրության չորրորդ տարբերակը, որը նախկինում լռելյայն առաջարկված երրորդ տարբերակի համեմատ թույլ է տալիս ավելի բարձր կատարողականություն և փոխանցվող տվյալների չափի կրճատում.
  • Մոդուլում մեքենագրում Ներդրված են մի քանի նոր առանձնահատկություններ.
    • Դաս TypedDict ասոցիատիվ զանգվածների համար, որոնցում տիպային տեղեկատվությունը հստակորեն նշված է ստեղների հետ կապված տվյալների համար («TypedDict(‘Point2D’, x=int, y=int, label=str)”):
    • Տիպ Գրականություն, որը թույլ է տալիս սահմանափակել պարամետրը կամ վերադարձնել արժեքը մի քանի նախապես սահմանված արժեքներով («Բառացի [«միացված», «անջատված»]»):
    • Դիզայն»Եզրափակիչ«, ինչը հնարավորություն է տալիս սահմանել փոփոխականների, ֆունկցիաների, մեթոդների և դասերի արժեքները, որոնք հնարավոր չէ փոխել կամ վերանշանակել («pi: Final[float] = 3.1415926536»):
  • Ավելացվեց բայթկոդով կազմված ֆայլերի համար քեշ նշանակելու հնարավորությունը, որը պահվում էր առանձին FS ծառի մեջ և առանձնացված կոդով դիրեկտորիաներից: Բայթկոդով ֆայլերը պահելու ուղին սահմանվում է փոփոխականի միջոցով PYTHONPYCACHEPREFIX կամ «-X pycache_prefix» տարբերակը;
  • Իրականացվել է Python-ի վրիպազերծման շինություններ ստեղծելու ունակություն, որոնք օգտագործում են թողարկմանը նույնական ABI, որը թույլ է տալիս բեռնել SI լեզվով գրված ընդարձակումներ, որոնք կազմված են կայուն թողարկումների համար, վրիպազերծման կառուցվածքներում.
  • f-strings (ձևաչափված բառացիները նախածանցով «f») ապահովում են = օպերատորի աջակցությունը (օրինակ՝ «f'{expr=}'»), որը թույլ է տալիս արտահայտությունը վերափոխել տեքստի ավելի հեշտ վրիպազերծման համար: Օրինակ:

    ››› օգտվող = «eric_idle»
    ››› Member_since = ամսաթիվ (1975, 7, 31)
    ››› f'{user=} {member_since=}'
    «user='eric_idle' Member_since=datetime.date(1975, 7, 31)»

  • Արտահայտություն»շարունակել» թույլատրվում է օգտագործել բլոկի ներսում վերջապես;
  • Ավելացվեց նոր մոդուլ multiprocessing.shared_memory, որը թույլ է տալիս օգտագործել ընդհանուր հիշողության սեգմենտները բազմապրոցեսային կոնֆիգուրացիաներում;
  • Windows հարթակում asyncio իրականացումը տեղափոխվել է դասը օգտագործելու համար ProactorEventLoop;
  • LOAD_GLOBAL հրահանգի կատարումն ավելացել է մոտավորապես 40%-ով՝ օբյեկտների կոդերի քեշավորման նոր մեխանիզմի կիրառման շնորհիվ:

Source: opennet.ru

Добавить комментарий