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

Մեկ տարվա մշակումից հետո հրապարակվել է Python 3.11 ծրագրավորման լեզվի զգալի թողարկումը։ Նոր մասնաճյուղը կաջակցվի մեկուկես տարի, որից հետո ևս երեքուկես տարի կստեղծվեն շտկումներ՝ վերացնելու խոցելիությունը։

Միևնույն ժամանակ, սկսվեց Python 3.12 մասնաճյուղի ալֆա փորձարկումը (զարգացման նոր ժամանակացույցի համաձայն, նոր մասնաճյուղի վրա աշխատանքը սկսվում է նախորդ մասնաճյուղի թողարկումից հինգ ամիս առաջ և հասնում է ալֆա թեստավորման փուլին հաջորդ թողարկման պահին: ) Python 3.12 մասնաճյուղը ալֆա թողարկվելու է յոթ ամիս, որի ընթացքում կավելացվեն նոր հնարավորություններ և կշտկվեն սխալները։ Դրանից հետո բետա տարբերակները կփորձարկվեն երեք ամսով, որի ընթացքում կարգելվի նոր գործառույթների ավելացումը և ամբողջ ուշադրությունը կդարձվի սխալների շտկմանը։ Թողարկումից առաջ վերջին երկու ամիսների ընթացքում մասնաճյուղը գտնվելու է ազատ արձակման թեկնածուի փուլում, որի ժամանակ կկատարվի վերջնական կայունացում։

Python 3.11-ի նոր հավելումները ներառում են.

  • Զգալի աշխատանք է կատարվել կատարողականի օպտիմալացման ուղղությամբ: Նոր մասնաճյուղը ներառում է փոփոխություններ՝ կապված ֆունկցիաների կանչերի արագացման և ներդիրում տեղակայման հետ, ստանդարտ գործողությունների արագ թարգմանիչների օգտագործումը (x+x, x*x, xx, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), ինչպես նաև Cinder և HotPy նախագծերի կողմից պատրաստված օպտիմալացումներ: Կախված բեռի տեսակից՝ նկատվում է կոդի կատարման արագության աճ 10-60%-ով։ Միջին հաշվով, pyperformance թեստային փաթեթի կատարումը աճել է 25% -ով:

    Վերանախագծվել է բայթ կոդերի քեշավորման մեխանիզմը, ինչը կրճատել է թարգմանչի գործարկման ժամանակը 10-15%-ով: Կոդով և բայթկոդով օբյեկտներն այժմ ստատիկ կերպով տեղաբաշխվում են թարգմանչի կողմից, ինչը հնարավորություն տվեց վերացնել քեշից հանված բայթկոդի անջատման և դինամիկ հիշողության մեջ տեղադրվող կոդով օբյեկտների փոխակերպման փուլերը:

  • Դիագնոստիկ հաղորդագրություններում զանգերի հետքերը ցուցադրելիս այժմ հնարավոր է ցուցադրել սխալի պատճառ դարձած արտահայտության մասին տեղեկություն (նախկինում միայն գիծն էր ընդգծված՝ առանց մանրամասնելու, թե գծի որ հատվածն է սխալ առաջացրել): Ընդլայնված հետագծային տեղեկատվությունը կարելի է նաև ստանալ API-ի միջոցով և օգտագործել առանձին բայթկոդի հրահանգները ելակետային կոդի որոշակի դիրքի վրա քարտեզագրելու համար՝ օգտագործելով codeobject.co_positions() մեթոդը կամ C API ֆունկցիան PyCode_Addr2Location(): Փոփոխությունը շատ ավելի հեշտ է դարձնում խնդիրների վրիպազերծումը ներդիր բառարանի օբյեկտների, բազմաթիվ ֆունկցիաների կանչերի և բարդ թվաբանական արտահայտությունների հետ: Հետագծում (վերջին զանգը). Ֆայլ «calculation.py», տող 54, արդյունքում = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError. բաժանում զրոյի
  • Ավելացվել է բացառությունների խմբերի աջակցություն՝ ծրագրին հնարավորություն տալով ստեղծել և մշակել մի քանի տարբեր բացառություններ միանգամից: Բազմաթիվ բացառություններ խմբավորելու և դրանք միասին բարձրացնելու համար առաջարկվել են բացառությունների նոր տեսակներ ExceptionGroup և BaseExceptionGroup, իսկ «բացառությամբ*» արտահայտությունն ավելացվել է՝ առանձնացնելու խմբի առանձին բացառությունները:
  • Add_note() մեթոդն ավելացվել է BaseException դասին, որը թույլ է տալիս բացառությանը կցել տեքստային նշում, օրինակ՝ ավելացնելով համատեքստային տեղեկատվություն, որը հասանելի չէ բացառությունը նետելիս:
  • Ավելացրել է հատուկ Self տեսակ՝ ընթացիկ մասնավոր դասը ներկայացնելու համար: Self-ը կարող է օգտագործվել ծանոթագրելու մեթոդներ, որոնք վերադարձնում են իր դասի օրինակը ավելի պարզ ձևով, քան TypeVar-ի օգտագործումը: դաս MyLock: def __enter__(self) -> Self: self.lock() վերադարձնել ինքնակառավարումը
  • Ավելացվեց LiteralString հատուկ տեսակ, որը կարող է ներառել միայն LiteralString տիպի հետ համատեղելի տողերի տողեր (այսինքն՝ մերկ և LiteralString տողեր, բայց ոչ կամայական կամ համակցված տողեր): LiteralString տեսակը կարող է օգտագործվել՝ սահմանափակելու տողերի արգումենտների փոխանցումը ֆունկցիաներով, կամայական փոխարինելով տողերի մասերը, որոնցում կարող են հանգեցնել խոցելիության, օրինակ՝ SQL հարցումների կամ shell հրամանների համար տողեր ստեղծելիս: def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query("SELECT * FROM Students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Error run_query( # Error f"SELECT * FROM Students WHERE name = {arbitrary_string}")
  • Ավելացվել է TypeVarTuple տեսակը, որը թույլ է տալիս օգտագործել փոփոխական գեներիկները, ի տարբերություն TypeVar-ի, որը ներառում է ոչ թե մեկ տեսակ, այլ տեսակների կամայական քանակ։
  • Ստանդարտ գրադարանը ներառում է tomllib մոդուլը՝ TOML ձևաչափը վերլուծելու գործառույթներով:
  • Հնարավոր է մուտքագրված բառարանների առանձին տարրեր (TypedDict) նշել Required և NotRequired պիտակներով՝ որոշելու համար պարտադիր և ընտրովի դաշտերը (ըստ լռելյայն, բոլոր հայտարարագրված դաշտերը պահանջվում են, եթե ընդհանուր պարամետրը սահմանված չէ False): class Movie(TypedDict). վերնագիր՝ str տարի՝ NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (տարվա դաշտը պարտադիր չէ) m3: Ֆիլմ = {“տարի”: 2022} # Սխալ, վերնագրի պահանջվող դաշտը լրացված չէ)
  • TaskGroup դասը ավելացվել է asyncio մոդուլին՝ ասինխրոն համատեքստի կառավարչի ներդրմամբ, որը սպասում է առաջադրանքների խմբի ավարտին: Խմբում առաջադրանքների ավելացումը կատարվում է create_task() մեթոդի միջոցով: async def main(): asyncio asyncio.TaskGroup()-ի հետ որպես tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Երկու առաջադրանքներն այժմ ավարտված են: .")
  • Ավելացվեց @dataclass_transform դեկորատորը դասերի, մեթոդների և գործառույթների համար, երբ նշված է, ստատիկ տիպի ստուգման համակարգը վերաբերվում է օբյեկտին, ասես օգտագործում է @dataclasses.dataclass դեկորատորը: Ստորև բերված օրինակում CustomerModel դասը, տեսակները ստուգելիս, կմշակվի այնպես, ինչպես դասը @dataclasses.dataclass decorator-ով, այսինքն. որպես __init__ մեթոդ, որն ընդունում է id և name փոփոխականները: @dataclass_transform() դաս ModelBase: ... դաս CustomerModel(ModelBase): id: int name: str.
  • Կանոնավոր արտահայտություններում ավելացվել է ատոմային խմբավորում ((?>...)) և տիրապետող քանակականներ (*+, ++, ?+, {m,n}+) օգտագործելու հնարավորությունը։
  • Ավելացվել է «-P» հրամանի տողի տարբերակը և PYTHONSAFEPATH միջավայրի փոփոխականը՝ պոտենցիալ անապահով ֆայլերի ավտոմատ կցումը sys.path-ին անջատելու համար:
  • Windows պլատֆորմի համար py.exe կոմունալ ծրագիրը զգալիորեն բարելավվել է՝ ավելացնելով «-V:» շարահյուսության աջակցությունը: / «ի լրումն» - . «
  • C API-ում շատ մակրոներ վերածվում են սովորական կամ ստատիկ ներդիրային ֆունկցիաների:
  • Uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev և sunau մոդուլները հնացել են և կհեռացվեն: 3.13 թողարկում. Հեռացվել է PyUnicode_Encode* ֆունկցիաները:

Source: opennet.ru

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