Команда CPython випустила Python 3.15 — чергове щорічне оновлення мови. Цього разу акцент зроблено на швидкості запуску програм, роботі з текстом і діагностиці, а експериментальний JIT-компілятор нарешті почав давати відчутний приріст продуктивності. Реліз доступний на.
Найпомітніша зміна для великих проєктів — явні ліниві імпорти за PEP 810. Раніше Python завантажував усі імпортовані модулі одразу, навіть якщо програма не використовувала їх під час роботи. У застосунках з розгалуженими залежностями це помітно сповільнювало старт. Тепер ключове слово lazy відкладає завантаження модуля до першого звернення: рядок lazy import json лише оголошує модуль, а фактично він підвантажується, коли код уперше його використає. Для CLI-утиліт і великих сервісів це простий спосіб скоротити час запуску без переписування архітектури.
Друга важлива зміна — UTF-8 стає стандартним кодуванням тексту відповідно до PEP 686. Це знижує ризик «кракозябрів» під час роботи з текстовими файлами, особливо коли проєкт переходить між Linux, Windows і macOS. Розробникам рідше доведеться вручну вказувати encoding="utf-8" у кожному виклику open().
У мові з’явилися два нові вбудовані типи. frozendict — незмінний словник: після створення його вміст не змінити, порядок вставки зберігається, а якщо всі ключі та значення хешовані, сам frozendict теж можна хешувати. sentinel — стандартний спосіб створювати унікальні маркерні значення. Зазвичай вони потрібні в API, щоб розрізнити аргумент, який не передали, і аргумент, якому явно призначили None.
JIT-компілятор у Python досі має статус експериментального, проте в 3.15 він суттєво покращився. На Linux x86-64 середній геометричний приріст порівняно зі стандартним інтерпретатором становить 7–8%. На macOS з архітектурою AArch64 JIT випереджає інтерпретатор із хвостовими викликами на 11–12%.
Для тих, хто займається продуктивністю, у релізі з’явився окремий пакет 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.
Окремий бонус для тих, хто хоче вивчити нововведення на практиці: розробник Баррі Варшо (Barry Warsaw) створив whatsnewt — текстову гру-квест для терміналу з 18 головоломками на основі можливостей 3.15. Найпростіше запустити її командою uvx --python 3.15 whatsnewt.
Для українських продуктових і бекенд-команд Python 3.15 — це насамперед привід переглянути час холодного старту сервісів і CLI-інструментів: ліниві імпорти можуть дати виграш без зміни архітектури. Варто також перевірити, чи не залежить ваш код від неявного кодування, яке тепер стало UTF-8, і протестувати профілювання живих процесів через Tachyon, якщо ви вже збираєте метрики продуктивності. Оновлення доступне на, деталі — в офіційному анонсі та документації What’s New in Python 3.15.
4




