Вышел Python 3.15 с UTF-8, ленивым импортом и новым JIT
Год работы завершился выпуском Python 3.15. Ветку поддержат полтора года, затем три с половиной года останутся исправления уязвимостей. По умолчанию включена UTF-8 независимо от системы: текстовый ввод и вывод идут в ней, если не указан encoding, в том числе локаль.
Отключение — -X utf8=0 или PYTHONUTF8=0. Ключевое слово lazy грузит модуль перед первым обращением к именам и ускоряет старт. До загрузки работает types.LazyImportType, ошибка при отсутствии модуля возникает при первом использовании.
Управление задают -X lazy_imports, PYTHON_LAZY_IMPORTS и вызовы sys для режима и фильтра. JIT в pyperformance в среднем быстрее на 11-12% на macOS AArch64 и на 7-8% на x86_64 Linux. В отдельных тестах разброс от ускорения более 100% до замедления на 15%.
Трассировка опирается на реальный ход кода, взята ветка LLVM 21, часть стека заменена регистрами, для GDB и GNU backtrace() есть раскрутка. Появились sentinel и frozendict: уникальные строки, сохраняющие тождество и сериализацию, и неизменяемые словари с порядком вставки, пригодные как ключи. Включения списков, множеств, словарей и генераторов собираются через * и ** в одну структуру.
Вместо .pth при старте можно использовать .start-файлы с точками входа pkg.mod:callable: функции вызываются без аргументов. Расширено профилирование, сборка идёт с -fno-omit-frame-pointer, есть игра whatsnewt.