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

После года разработки опубликован значительный выпуск языка программирования Python 3.13. Новая ветка будет поддерживаться в течение полутора лет, после чего ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей.

Среди добавленных в Python 3.13 новшеств:

  • Добавлена экспериментальная реализация JIT-компилятора, позволяющего добиться существенного повышения производительности. Для включения JIT в CPython добавлена сборочная опция “–enable-experimental-jit”, использование которой требует установки LLVM в качестве дополнительной зависимости. Процесс трансляции машинного кода в JIT построен c использованием архитектуры “Copy-and-Patch“, при которой при помощи LLVM собирается объектный файл в формате ELF, содержащий данные об инструкциях байткода и информацию о необходимой замене данных. JIT заменяет сгенерированные в ходе интерпретации программы инструкции байткода на их представления в машинном коде, попутно подставляя необходимые для вычислений данные (JIT копирует готовые шаблоны уже скомпилированных функций и подставляет в них необходимые значения, такие как аргументы и константы).
  • Добавлен экспериментальный режим сборки CPython без глобальной блокировки интерпретатора (GIL, Global Interpreter Lock), который включается при помощи опции “–without-gil” и позволяет избавиться от проблемы с распараллеливанием операций на многоядерных системах, вызванной тем, что глобальная блокировка не допускает параллельное обращение к разделяемым объектам из разных потоков. Отключение GIL приводит к дополнительным накладным расходам, вызванным изменениями в сборщике мусора, системе управления памятью и примитивах для организации блокировок. Например, из-за использования подсчёта ссылок для изоляции потоков наблюдается снижение производительности однопоточных сценариев примерно на 10%. При этом подобные накладные расходы могут компенсироваться распараллеливанием операций.
  • Предложен новый улучшенный интерактивный интерпретатор, основанный на наработках проекта PyPy и поддерживающий такие возможности, как многострочное редактирование, сохранение и просмотр истории, цветное оформление запросов и трассировок, использование REPL-подобных команд (help, exit, quit и т.п.) без привлечения функций, интерактивная справка, режим вставки больших блоков кода.
  • Семантика встроенной функции locals(), возвращающей все локальные переменные и их значения в текущей области видимости, изменена для оптимизированных областей видимости, таких как функции, генераторы и сопрограммы, для которых теперь возвращаются независимые снапшоты выставленных в данный момент локальных переменных и не локальных переменных, отражённых в замыканиях.
  • В состав по умолчанию включена изменённая версия библиотекиmimalloc с открытой компанией Microsoft системой распределения памяти, демонстрирующей очень высокую производительность. Библиотека задействована при сборке без GIL.
  • Обеспечена очистка компилятором лидирующих пробелов из каждой документирующей строки (docstring), что позволило сократить потребляемую память и уменьшить размер кэша с байткодом (файлов .pyc).
  • В модуле dbm реализован бэкенд dbm.sqlite3, который использует SQLite и применяется по умолчанию при создании новых файлов.
  • Реализована поддержка указания значений по умолчанию в параметрах типов (typing.TypeVar, typing.ParamSpec и typing.TypeVarTuple). Например: ‘T = TypeVar(“T”, default=int)’.
  • Добавлена нова аннотация typing.TypeIs для уточнения типов, более интуитивно понятная, чем typing.TypeGuard.
  • Добавлена возможность использования аннотации typing.ReadOnly для пометки элементов TypeDicts, доступных только для чтения.
  • Добавлена новая аннотация warnings.deprecated() для пометки устаревших элементов в системе типов.
  • Из стандартной библиотеки удалены модули aifc, audioop, chunk, cgi, cgitb, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu, xdrlib и lib2to3, ранее объявленные устаревшими.
  • В модуль copy добавлена функция copy.replace().
  • В модуль os добавлены функции для работы с таймером через дескрипторы timerfd.
  • Для модуля random реализован интерфейс командной строки.
  • Прекращена поддержка версий macOS c 10.9 по 10.12.
  • Обеспечена поддержка мобильных платформ iOS и Android, которая отнесена к третьему уровню (Tier 3), на котором гарантируется надёжная сборка и как минимум один ключевой разработчик обеспечивает сопровождение платформы, но связанные с платформой сбои не блокируют релиз и не охватываются SLA-поддержкой.
  • Поддержка платформы wasm32-wasi (WebAssembly System Interface) переведена на второй уровень, на котором сбои блокируют релиз, а вызывающие их изменения исправляются или отменяются в течение 24 часов. Прекращена официальная поддержка платформы wasm32-emscripten.

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

Release. Ссылка here.