Команда розробників Python представила версію 3.15 — щорічне оновлення мови. За інформацією Phoronix, головні зміни стосуються швидкості старту програм, обробки тексту та засобів діагностики, а експериментальний JIT-компілятор нарешті почав демонструвати помітний приріст швидкодії.
Головне про Python 3.15 одним поглядом
- Експериментальний JIT — приріст швидкодії на 7–8% на Linux x86-64 та на 11–12% на macOS з AArch64
- Ліниві імпорти (PEP 810) — явне відкладене завантаження модулів для пришвидшення старту
- UTF-8 за замовчуванням (PEP 686) — однакове кодування тексту незалежно від операційної системи
- frozendict — новий вбудований тип незмінного словника
- sentinel — стандартизовані маркерні значення
- пакет profiling та інструмент Tachyon — профілювання запущених процесів без перезапуску
- frame pointers — надійніша трасировка стеку, сумісна з eBPF
Ліниві імпорти пришвидшують запуск
Донедавна Python завантажував усі імпортовані модулі одразу під час старту програми, навіть якщо вони не використовувалися під час виконання коду. У масштабних проєктах із великою кількістю залежностей це відчутно затягувало запуск. Версія 3.15 вирішує цю проблему завдяки явним лінивим імпортам, описаним у PEP 810.
Нове ключове слово lazy дозволяє відкласти завантаження модуля до моменту першого реального звернення до нього. Наприклад, конструкція lazy import json лише фіксує намір використати модуль, а завантаження відбувається тільки тоді, коли код справді до нього звертається. Для консольних утиліт та об'ємних сервісів це дає змогу скоротити час запуску, не змінюючи архітектуру застосунку.
UTF-8 став стандартом
Згідно з PEP 686, кодування UTF-8 тепер використовується за замовчуванням для роботи з текстом. Це мінімізує ймовірність появи нечитабельних символів при роботі з текстовими файлами, особливо коли проєкт переносять між Linux, Windows та macOS. Розробникам більше не доведеться щоразу прописувати encoding="utf-8" у виклику open().
Два додаткові вбудовані типи
Тип frozendict являє собою незмінний словник: після створення його вміст змінити не можна, а порядок додавання елементів зберігається. Якщо всі ключі та значення піддаються хешуванню, то й сам frozendict можна хешувати.
Тип sentinel пропонує уніфікований спосіб створювати унікальні маркерні значення. Зазвичай вони потрібні в API, щоб відрізнити ситуацію, коли аргумент не передали взагалі, від випадку, коли йому явно присвоїли значення None.
JIT лишається експериментальним, та вже дає відчутний приріст
Статус JIT-компілятора в Python досі офіційно експериментальний, проте у версії 3.15 його продуктивність суттєво зросла. За даними Linuxiac, на Linux x86-64 середній геометричний приріст порівняно зі звичайним інтерпретатором становить 7–8%. На macOS з архітектурою AArch64 JIT випереджає інтерпретатор із хвостовими викликами на 11–12%.
Новий інструмент профілювання Tachyon
У цьому релізі з'явився окремий пакет profiling, що об'єднує інструменти для профілювання під єдиним інтерфейсом. До нього входить Tachyon — статистичний семплювальний профайлер із високою частотою опитування та мінімальними накладними витратами.
- Підключається до вже запущеного процесу Python без перезапуску й без змін у коді
- Підтримує кілька режимів вимірювання: за часом CPU, за реальним (wall-clock) часом та за часом утримання глобального блокування інтерпретатора (GIL)
- Будує flame graph та інші візуалізації для виявлення вузьких місць у продуктивності
Зручніше для Linux-адміністраторів та системних інженерів
CPython тепер за замовчуванням активує frame pointers на платформах, що це підтримують. Завдяки цьому трасування нативного стеку стає надійнішим, а сумісність із системними інструментами профілювання й налагодження — зокрема тими, що базуються на eBPF — покращується.
Крім того, розширено підтримку збірок без GIL (free-threaded): з'явилася підтримка стабільного ABI для таких збірок, а також низка покращень C API, що полегшує роботу авторам розширень.
Інші зміни
- Покращені повідомлення про помилки та більше кольору у виводі командного рядка
- Нові можливості типізації
- Покращення стандартної бібліотеки та C API
- Офіційні 64-бітні збірки для Windows тепер використовують інтерпретатор із хвостовими викликами
- Інсталятори для macOS за замовчуванням включають підтримку free-threading
Бонус: гра про нововведення Python
Розробник Баррі Варшо (Barry Warsaw) створив whatsnewt — текстовий квест для терміналу з 18 головоломками, побудованими на нововведеннях версії 3.15. Запустити гру найпростіше командою uvx --python 3.15 whatsnewt.
Де завантажити й що почитати
Python 3.15 вже доступний для завантаження на Python.org. Докладніше про зміни можна дізнатися з офіційного анонсу та документації What's New in Python 3.15.
Джерело: Highload.tech


