Python 3.15 beta 3: ленивые импорты, встроенный frozendict и UTF-8 по умолчанию

23 июня вышла предпоследняя бета Python 3.15. Набор фич заморожен: PEP 810 (явные ленивые импорты), PEP 814 (frozendict), UTF-8 как кодировка по умолчанию, новый профилировщик Tachyon и JIT, ускорившийся на 8–13%.

DB
DBG · по материалам Python Insider
0

Core-команда Python выпустила 3.15.0b3 — предпоследнюю бету перед релиз-кандидатом. Набор фич заморожен ещё на первой бете, так что список того, что приедет в октябрьский релиз, уже практически финальный. И он получился объёмным.

Самое обсуждаемое — PEP 810, явные ленивые импорты: модуль подгружается не в момент выполнения строки import, а при первом обращении к имени. Для CLI-утилит и AWS Lambda, где половина времени старта уходит на импорт тяжёлых пакетов, это прямая экономия. Рядом — PEP 814 со встроенным типом frozendict (наконец-то хешируемый словарь без сторонних библиотек) и PEP 661 с типом sentinel, который закрывает вечный вопрос «как отличить не переданный аргумент от переданного None».

Дальше по списку: PEP 686 делает UTF-8 кодировкой по умолчаниюopen() больше не смотрит на локаль системы; PEP 798 разрешает распаковку внутри comprehension'ов; PEP 829 вводит конфигурационные файлы старта для пакетов. Типизация получила PEP 728 (TypedDict с типизированными дополнительными ключами), PEP 747 (TypeForm для аннотирования самих типовых форм) и PEP 800 (непересекающиеся базовые классы). В C API появился PyBytesWriter (PEP 782), а стабильный ABI дотянули до free-threaded-сборок (PEP 803, 820, 793) — это важный шаг к тому, чтобы бинарные пакеты наконец начали собираться под no-GIL без отдельного колеса на каждую версию.

По производительности: JIT-компилятор существенно доработан и даёт, по замерам команды, прирост 8–13%; интерпретатор с tail-call'ами теперь доступен и в 64-битных сборках под Windows; включены frame pointers по умолчанию (PEP 831), чтобы профилировщики уровня ОС видели стек Python. Появился и отдельный пакет для профилирования со статистическим сэмплирующим профайлером Tachyon (PEP 799). Дальше по графику: beta 4 — 18 июля, первый RC — 4 августа, финальный релиз — в октябре.

Что делать разработчику. Прямо сейчас — добавить 3.15-dev в матрицу CI и прогнать тесты библиотек, от которых вы зависите: именно ради этого бета и существует, а на RC чинить баги в чужих пакетах будет поздно. Отдельно проверьте два места. Первое — PEP 686: если у вас где-то есть open(path) без явного encoding=, а файл в cp1251 или в системной локали, на 3.15 он начнёт читаться как UTF-8 и упадёт с UnicodeDecodeError. Пройдитесь grep'ом по open( и проставьте кодировку явно — это безопасно и на текущих версиях. Второе — C-расширения: если вы их собираете, соберитесь против 3.15 заранее, особенно если целитесь в free-threaded-сборку. Ленивые импорты пока трогать не обязательно, но если у вас CLI со стартом в сотни миллисекунд, к релизу стоит замерить, что даёт PEP 810 на вашем дереве импортов. И, разумеется, бету в прод не тащим.

Комментарии

Python 3.15 beta 3: ленивые импорты, встроенный frozendict и UTF-8 по умолчанию | DBG