Выпуск языка программирования 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'‹img {attributes}›'
       print (html(template))
    
          ‹img src="limburger.jpg" alt="lovely cheese" /›
    
    
  • В стандартную библиотеку добавлен модуль
    concurrent.interpreters, позволяющий одновременно выполнять в одном процессе несколько изолированных друг от друга копий Python-интерпрератора. Ранее данная возможность была доступна только через C-API. Одновременное выполнение нескольких интерпретаторов может использоваться для распаралелливания операций по аналогии с запуском нескольких параллельно выполняемых процессов, но в отличие от многопроцессной модели расходует меньше ресурсов. На уровне приложений для разделения операций о интерпретаторам могут использоваться модель акторов и CSP (взаимодействие последовательных процессов).

  • Обеспечена отложенная обработка аннотаций для функций, классов и модулей. Аннотации теперь не обрабатываются сразу, а сохраняются в форме специализированных функций и вычисляются при возникновении необходимости. Новое поведение позволяет упростить работу с аннотациями и снизить накладные расходы на обработку аннотация во время выполнения. Для инспектирования отложенных аннотаций предложен модуль
    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, без необходимости перезапуска, без остановки выполнения приложения и без влияния на производительность.
  • В модуль uuid добавлены функции uuid6(), uuid7() и uuid8() с реализацией 6, 7 и 8 версий UUID-идентификаторов.
  • Добавлен вывод предупреждения при использовании выражений «return», «break» и «continue» для выхода из блока «finally«.
  • Добавлен C API PyInitConfig для настройки инициализации Python без привязки с структурам на языке Си и дающий возможность вносить изменения, не нарушающие ABI. Предоставляются функции Add PyConfig_Get() и PyConfig_Set() для получения и выставления конфигурации, а также функция PyInitConfig_AddModule() для добавления модуля с расширением.
  • В CPython реализован новый тип интерпретатора, использующий хвостовые вызовы между C‑функциями, реализующими отдельные байткоды Python, вместо одной большой функции с выражением switch/case. При сборке в Clang 19 новый интерпретатор демонстрирует повышение производительности на 3-5% при выполнении тестов pyperformance. Новый интерпретатор пока доступен в качестве опции для архитектур x86-64 и AArch64, и требует для сборки как минимум версии Clang 19 (поддержку GCC обещают позднее).
  • Улучшены сообщения об ошибках. Добавлены рекомендации по устранению ошибок при опечатках в ключевых словах.
  • В состав интегрированы результаты работы по замене в Python реализаций криптографических алгоритмов, предлагаемых в модулях hashlib и hmac, на варианты с математическим (формальным) доказательством надёжности, подготовленные проектом «HACL*«. Все предоставляемые по умолчанию в Python хэш-функции и HMAC заменены на варианты, для которых предоставлено формальное доказательство соответствия (формальная верификация). Среди прочего, добавлена реализация HMAC-BLAKE2, использующая SIMD-инструкции AVX2 для ускорения вычислений.
  • Добавлен новый интерфейс командной строки («python -m asyncio ps PID» и «python -m asyncio pstree PID») для инспектирования запущенных Python-процессов с асинхронными задачами (asyncio).
  • В модуль pdb добавлена поддержка удалённого подсоединения к работающим Python-процессам. Например, для подключения к процессу с номером 1234 можно использовать команду «python -m pdb -p 1234».
  • В состав готовых сборок для macOS и Windows включён экспериментальный JIT-компилятор. Инсталлятор для Windows заменён на менеджер установок.
  • Для верификации целостности сборок вместо PGP-подписей задействована система криптографической верификации кода Sigstore.
  • Предоставлены официальные бинарные сборки для платформы Android.

В ближайшие часы начнётся альфа-тестирование ветки Python 3.15, которая будет находиться на стадии альфа-выпусков в течение семи месяцев, во время которых будут добавляться новые возможности и производиться исправление ошибок (в соответствии с новым графиком разработки работа над новой веткой начинается за пять месяцев до релиза предыдущей ветки и к моменту очередного релиза достигает стадии альфа-тестирования). После этого в течение трёх месяцев будет проводиться тестирование бета-версий, во время которого добавление новых возможностей будет запрещено и всё внимание будет уделяться исправлению ошибок. Последние два месяца перед релизом ветка будет находиться на стадии кандидата в релизы, на которой будет выполнена финальная стабилизация.

Источник: http://www.opennet.ru/opennews/art.shtml?num=64017