Выпуск мовы праграмавання Python 3.8

Пасля паўтара года распрацоўкі прадстаўлены значны рэліз мовы праграмавання Python 3.8. Карэкціруючыя абнаўленні для галінкі Python 3.8 плануецца выпускаць на працягу 18 месяцаў. Крытычныя ўразлівасці будуць выпраўляцца 5 гадоў да кастрычніка 2024 года. Карэкціруючыя абнаўленні для галінкі 3.8 будуць выходзіць раз у два месяцы, на снежань намечаны першы карэкціруючы рэліз Python 3.8.1.

Сярод дададзеных навін:

  • Падтрымка аперацый прысваення ўнутры складаных выразаў. Пры дапамозе новага аператара «:=» з'явілася магчымасць выконваць аперацыі прысваення значэнняў усярэдзіне іншых выразаў, напрыклад, каб пазбегнуць падвойнага выкліку функцый ва ўмоўных аператарах і пры азначэнні цыклаў:

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

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

  • Падтрымка новага сінтаксісу задання аргументаў функцыі. Пры пералічэнні аргументаў падчас вызначэння функцыі зараз можна паказваць прыкмету "/", які дазваляе аддзяліць аргументы, значэнні якім могуць быць прысвоены толькі на аснове парадку пералічэння значэнняў падчас выкліку функцыі, ад аргументаў, якія дапускаюць прысваенне ў адвольным парадку (сінтаксіс "пераменная=значэнне" ). З практычнага боку новая магчымасць дазваляе ў функцыях на мове Python цалкам эмуляваць паводзіны існых функцый на мове Сі, а таксама пазбегнуць прывязак да пэўных імёнаў, напрыклад, калі імя параметра плануецца змяніць у будучыні.

    Сцяг "/" дапаўняе сабой раней дабаўленую прыкмету "*", якая адлучае зменныя, для якіх дастасавальна толькі прысваенне ў форме "пераменная=значэнне". Напрыклад, у функцыі "def f(a, b, /, c, d, *, e, f):" зменныя "a" і "b" могуць быць прысвоены толькі ў парадку пералічэння значэнняў,
    зменныя "e" і "f", толькі праз прысваенне "пераменная=значэнне", а зменныя "c" і "d" любым з названых спосабаў:

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

  • Дададзены новы Сі API
    для налады параметраў ініцыялізацыі Python, які дазваляе цалкам кантраляваць усю канфігурацыю і які прадстаўляе пашыраныя сродкі апрацоўкі памылак. Прапанаваны API спрашчае ўбудаванне функцыянальнасці інтэрпрэтатара Python у іншыя прыкладанні на мове Сі;

  • Рэалізаваны новы пратакол Vectorcall для хутчэйшага звароту да аб'ектаў, напісаных на мове Сі. У CPython 3.8 доступ да Vectorcall пакуль абмежаваны унутраным выкарыстаннем, перавод у разрад публічна даступных API вызначаны ў CPython 3.9;
  • Дададзены выклікі Runtime Audit Hooks, якія прадстаўляюць прыкладанням і фрэймворкам на мове Python доступ да нізкаўзроўневай інфармацыі аб ходзе выканання скрыпту для правядзення аўдыту выкананых дзеянняў (напрыклад, можна адсачыць імпарт модуляў, адкрыццё файлаў, выкарыстанні трасіроўкі, звароты да сеткавых сокетаў, запуск кода праз exec, eval і run_mod);
  • У модулі расол забяспечана падтрымка пратаколу Pickle 5, які выкарыстоўваецца для серыялізацыі і дэсерыялізацыі аб'ектаў. Pickle дазваляе аптымізаваць перадачу вялікіх аб'ёмаў дадзеных паміж працэсамі Python у шмат'ядравых і шматвузлавых канфігурацыях, скараціўшы колькасць аперацый капіявання памяці і ужываючы дадатковыя тэхнікі аптымізацыі, такія як задзейнічанне спецыфічных для вызначаных дадзеных алгарытмаў сціску. Пятая версія пратакола характэрна даданнем рэжыму аддзеленай перадачы (out-of-band), пры якім дадзеныя могуць перадавацца асобна ад асноўнага струменя pickle.
  • Па змаўчанні актываваная чацвёртая версія пратаколу Pickle, якая ў параўнанні з раней прапанаванай па змаўчанні трэцяй версіяй дазваляе дамагчыся больш высокай прадукцыйнасці і скарачэнні памеру перадаваных дадзеных;
  • У модулі ўвод прадстаўлена некалькі новых магчымасцей:
    • Клас TypedDict для асацыятыўных масіваў, у якіх для злучаных з ключамі дадзеных відавочна задаецца інфармацыя аб тыпе ("TypedDict('Point2D', x=int, y=int, label=str)").
    • Тып Літаральны, які дазваляе абмежаваць параметр або якое вяртаецца значэнне некалькімі наканаванымі значэннямі («Literal['connected', 'disconnected']»).
    • Канструкцыя «Канчатковы«, якая дае магчымасць вызначыць значэнні зменных, функцый, метадаў і класаў, якія не могуць быць зменены ці пераназначаны («pi: Final[float] = 3.1415926536»).
  • Дададзена магчымасць прызначэння кэша для скампіляваных файлаў з байткодам, які захоўваецца ў асобным дрэве ФС і аддзеленага ад каталогаў з кодам. Шлях для захавання файлаў з байткодам задаецца праз зменную PYTHONPYCACHEPREFIX ці опцыю "-X pycache_prefix";
  • Рэалізавана магчымасць стварэння адладкавых зборак Python, якія выкарыстоўваюць ідэнтычны з рэлізам ABI, што дазваляе ў адладкавых зборках загружаць напісаныя на мове СІ пашырэнні, сабраныя для стабільных выпускаў;
  • У f-радках (фарматаваныя літаралы з прэфіксам 'f') забяспечана падтрымка аператара "=" (напрыклад, "f'{expr=}'"), які дазваляе пераўтварыць выраз у тэкст для спрашчэння адладкі. Напрыклад:

    ››› user = 'eric_idle'
    ››› member_since = date(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% за кошт выкарыстання новага механізму кэшавання аб'ектнага кода.

Крыніца: opennet.ru

Дадаць каментар