Выпуск языка программирования Python 3.14

После года разработки опубликован значительный выпуск языка программирования 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))
    lovely cheese
  • В стандартную библиотеку добавлен модуль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, которая будет находиться на стадии альфа-выпусков в течение семи месяцев, во время которых будут добавляться новые возможности и производиться исправление ошибок (в соответствии с новым графиком разработки работа над новой веткой начинается за пять месяцев до релиза предыдущей ветки и к моменту очередного релиза достигает стадии альфа-тестирования). После этого в течение трёх месяцев будет проводиться тестирование бета-версий, во время которого добавление новых возможностей будет запрещено и всё внимание будет уделяться исправлению ошибок. Последние два месяца перед релизом ветка будет находиться на стадии кандидата в релизы, на которой будет выполнена финальная стабилизация.

Release. Ссылка here.