После года разработки опубликован значительный выпуск языка программирования 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-поддержкой.
- Mbështetje për platformën wasm32-wasi (WebAssembly System Interface) është çuar në një nivel të dytë, ku dështimet bllokojnë lëshimin dhe ndryshimet që i shkaktojnë ato rregullohen ose anulohen brenda 24 orëve. Mbështetja zyrtare për platformën wasm32-emscripten është ndaluar.
Në orët e ardhshme do të fillojë testimi alfa i degës Python 3.14, e cila do të jetë në fazën e lëshimeve alfa për shtatë muaj, gjatë të cilëve do të shtohen mundësi të reja dhe do të bëhen rregullime gabimesh (sipër bazës së re të zhvillimit, puna për degën e re fillon pesë muaj para lëshimit të degës së mëparshme dhe në momentin e lëshimit tjetër arrin fazën e testimit alfa). Pas kësaj, për tre muaj do të zhvillohet testimi i versioneve beta, gjatë të cilit do të ndalohet shtimi i mundësive të reja dhe gjithë vëmendja do t'i kushtohet rregullimit të gabimeve. Dy muajt e fundit para lëshimit, dega do të jetë në fazën e kandidatëve për lëshim, ku do të realizohet stabilizimi përfundimtar.
Burimi: opennet.ru
