7 октября 2024 года состоялся релиз стабильной версии языка программирования Python 3.13 с экспериментальным JIT-компилятором, улучшенным интерактивным интерпретатором на основе PyPy и экспериментальным режимом сборки free-threaded build mode. Поддержка этой ветки запланирована в течение полутора лет. Потом ещё три с половиной года для Python 3.13 будут выходить исправления с устранением уязвимостей.
По информации OpenNET, основные изменения и добавления в 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.
В октябре 2023 года состоялся выпуск языка программирования Python 3.12. Эта ветка будет поддерживаться в течение полутора лет после релиза. Потом ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей.