Після року опубліковано значний випуск мови програмування Python 3.14. Нова гілка підтримуватиметься протягом півтора року, після чого ще три з половиною роки для неї формуватимуться виправлення з усуненням уразливостей.
Серед нововведень, доданих до Python 3.14 (1, 2, 3):
- Реалізовано офіційну підтримку складання CPython без глобального блокування інтерпретатора (GIL, Global Interpreter Lock). Складання без GIL дозволяє позбавитися проблеми з розпаралелювання операцій на багатоядерних системах, викликаної тим, що глобальне блокування не допускає паралельне звернення до об'єктів, що розділяються, з різних потоків. Відключення GIL призводить до додаткових накладних витрат, викликаних змінами у збирачі сміття, системі управління пам'яттю та примітивах для організації блокувань. Наприклад, через використання підрахунку посилань для ізоляції потоків спостерігається зниження продуктивності однопотокових сценаріїв приблизно на 10%. При цьому такі накладні витрати можуть компенсуватися розпаралелюванням операцій.
- Додано підтримку t-рядків (літерали з префіксом 't'), що дозволяють використовувати синтаксис, схожий на f-рядки, для створення власних обробників шаблонів у рядках. На відміну від f-рядків t-рядки повертають об'єкт, що окремо зберігає статичні рядкові дані та підставлювані значення. Роздільне зберігання дозволяє прив'язувати власні обробники, що впливають тільки на значення, що підставляються. Наприклад, можна підключити обробник для переведення значення в верхній регістр або для екранування спецсимволів при підстановці в рядок зовнішніх даних. variety = 'Stilton' template = t'Try some {variety} cheese!' print(list(template)) print(lower_upper(template)) ['Try some', Interpolation('Stilton', 'variety', None, »), 'cheese!'] Try some STILTON cheese! attributes = {'src': 'limburger.jpg', 'alt': 'lovely cheese'} template = t' 'print (html (template))
- До стандартної бібліотеки додано модуль concurrent.interpreters, що дозволяє одночасно виконувати в одному процесі кілька ізольованих один від одного копій Python-інтерпрератора. Раніше ця можливість була доступна лише через C-API. Одночасне виконання кількох інтерпретаторів може використовуватися для розпаралелювання операцій за аналогією із запуском кількох паралельно виконуваних процесів, але на відміну від багатопроцесної моделі витрачає менше ресурсів. На рівні додатків для поділу операцій з інтерпретаторами можуть використовуватися модель акторів та CSP (взаємодія послідовних процесів).
- У CPython реалізовано новий тип інтерпретатора, що використовує хвостові виклики між C‑функціями, що реалізують окремі байткод Python, замість однієї великої функції з виразом switch/case. При складанні Clang 19 новий інтерпретатор демонструє підвищення продуктивності на 3-5% при виконанні тестів pyperformance. Новий інтерпретатор поки доступний як опція для архітектур x86-64 і AArch64, і вимагає для складання як мінімум версії Clang 19 (підтримку GCC обіцяють пізніше).
- Забезпечено відкладене оброблення анотацій для функцій, класів та модулів. Анотації тепер не обробляються відразу, а зберігаються у формі спеціалізованих функцій і обчислюються у разі необхідності. Нова поведінка дозволяє спростити роботу з анотаціями та знизити накладні витрати на обробку анотація під час виконання. Для інспектування відкладених анотацій запропоновано модуль annotationlib.
- До стандартної бібліотеки додано пакет compression, що надає функції для стиснення та розпакування даних за допомогою різних алгоритмів. Крім модулів compression.lzma, compression.bz2, compression.gzip і compression.zlib, що надають доступ до функціональності, раніше доступної в модулях lzma, bz2, gzip та zlib, додано новий модуль compression.zstd з реалізацією алгоритму ZSTD (Zstandard).
- У виразах «except» та «except*» дозволено не поміщати вміст у дужки, якщо у виразі вказується кілька типів винятків і не використовується ключове слово «as». try: connect_to_server() except TimeoutError, ConnectionRefusedError: print('The network has ceased to be!')
- В інтерактивній оболонці PyREPL реалізовано підсвічування синтаксису. Включено кольоровий висновок у CLI-утилітах з модулів unittest, argparse, json та calendar.
- Доданий інтерфейс для підключення зовнішніх налагоджувачів та профільників до вже працюючих процесів CPython, що не вимагає зупинки та перезапуску, і не впливає на продуктивність.
- У модуль pdb додано підтримку віддаленого приєднання до працюючих Python-процесів. Наприклад, для підключення до процесу з номером 1234 можна використовувати команду python -m pdb -p 1234.
- У модуль uuid додані функції uuid6(), uuid7() та uuid8() з реалізацією 6, 7 та 8 версій UUID-ідентифікаторів.
- Додано висновок попередження при використанні виразів "return", "break" та "continue" для виходу з блоку "finally".
- Доданий C API PyInitConfig для налаштування ініціалізації Python без прив'язки до структур на мові Сі, що дозволяє вносити зміни, що не порушують ABI. Надаються функції Add PyConfig_Get() та PyConfig_Set() для отримання та виставлення конфігурації, а також функція PyInitConfig_AddModule() для додавання модуля з розширенням.
- Поліпшено повідомлення про помилки. Додано рекомендації щодо усунення помилок під час помилок у ключових словах.
- До складу інтегровані результати роботи із заміни в Python реалізацій криптографічних алгоритмів, пропонованих у модулях hashlib і hmac, на варіанти з математичним (формальним) доказом надійності, підготовлені проектом «HACL*». Всі хеш-функції, що надаються за замовчуванням у Python, і HMAC замінені на варіанти, для яких надано формальний доказ відповідності (формальна верифікація). Серед іншого, додано реалізацію HMAC-BLAKE2, яка використовує SIMD-інструкції AVX2 для прискорення обчислень.
- Доданий новий інтерфейс командного рядка ("python -m asyncio ps PID" та "python -m asyncio pstree PID") для інспектування запущених Python-процесів з асинхронними завданнями (asyncio).
- До складу готових збірок для MacOS і Windows включений експериментальний JIT-компілятор. Інсталятор для Windows замінено менеджером установок.
- Для верифікації цілісності складання замість PGP-підписів задіяна система криптографічної верифікації коду Sigstore.
- Надано офіційні бінарні збірки для платформи Android.
Найближчим часом розпочнеться альфа-тестування гілки Python 3.15, яка перебуватиме на стадії альфа-випусків протягом семи місяців, під час яких будуть додаватися нові можливості та проводитися виправлення помилок (відповідно до нового графіка розробки робота над новою гілкою починається за п'ять місяців. до релізу попередньої гілки і на момент чергового релізу досягає стадії альфа-тестування). Після цього протягом трьох місяців буде проводитися тестування бета-версій, під час якого додавання нових можливостей буде заборонено і вся увага приділятиметься виправленню помилок. Останні два місяці перед релізом гілка перебуватиме на стадії кандидата у релізи, на якій буде виконано фінальну стабілізацію.
Джерело: opennet.ru
