После годовой разработки опубликована значимая версия языка программирования Python 3.12 , поддержка которой продлится полтора года, после чего следует еще три с половиной года обновлений, направленных на устранение уязвимостей. Разработчики также запустили альфа-тестирование Python 3.13 . Одной из заметных особенностей этой версии стал режим сборки CPython, который работает без глобальной блокировки интерпретатора (GIL). Планируется, что Python 3.13 будет в альфа-версии в течение 7 месяцев, с дальнейшим трёхмесячным тестированием бета-версий. Перед финальным релизом на протяжении двух месяцев версия будет на стадии кандидата в релизы. Что нового в Python 3.12? - Улучшена гибкость разбора f-строк (форматированные литералы с префиксом ‘f’), позволившая избавиться от многих ограничений. Например, теперь можно использовать любые допустимые для Python выражения внутри f-строк, включая многострочные выражения, комментарии, обратные слэши и escape-последовательности для Unicode. Кроме того, теперь можно использовать одинаковые кавычки для обрамления f-строки и для внутренней строки (т.е. теперь можно использовать двойные кавычки внутри двойных кавычек, не переключаясь на одинарные). Улучшена информативность сообщений об ошибках в f-строках, в которых теперь показывается точное место ошибки в строке.
- Внесены улучшения для работы на многоядерных системах: добавлена поддержка изолированных субинтерпретаторов и отдельных GIL (Global Interpreter Lock) для разных интерпретаторов в одном процессе. Пока эта функция доступна только через C-API.
- В Python-код теперь можно использовать протокол buffer . Теперь классы, обеспечивающие метод "buffer()", могут быть использованы как типы, напрямую работающие с бинарными данными в памяти.
- Предложен модуль sys.monitoring для отладки и профилирования, позволяющий с минимальными накладными расходами отслеживать такие события в CPython, как вызовы, возвраты из функций, выполнение произвольных строк кода, исключения и переходы.
- В интерпретаторе добавлена функция для поддержки Linux ядра perf, что позволяет опознавать имена функций на Python в процессе профилирования с помощью утилиты perf.
- Улучшена детальность сообщений об ошибках и расширен диапазон исключений, предоставляющих советы по коррекции опечаток. Например, теперь выводятся рекомендации по импорту забытых модулей стандартной библиотеки, показываются подсказки по добавлению префикса "self." в методах, определяется написание "import x from y" вместо "from y import x" и т.п
- Ведутся работы по улучшению производительности, что привело к увеличению эффективности на 5%.
- В процесс сборки добавлена экспериментальная поддержка бинарного оптимизатора BOLT, повышающего производительность на 1-5%.
- Внедрено inline-развёртывание списковых включений ( comprehensions ), до двух раз ускоряющее работу со списковыми включениями (для кода, в котором активно используются списковые включения, тестирование показало общий прирост производительности на 11%).
- Размер Unicode-элементов сокращен на 8-16 байт.
- Действия с регулярными выражениями, такие как re.sub(), re.subn() и re.Pattern, теперь выполняются быстрее.
- Проверки isinstance() для некоторых протоколов теперь в 2-20 раз быстрее.
- Пакет asyncio стал значительно эффективнее, с ускорением до 75% в некоторых сценариях.
- Ускорено создание объектов класса asyncio.Task.
- Функции tokenize.tokenize() и tokenize.generate_tokens() значительно ускорены, в некоторых тестах на 64%.
- Ускорена загрузка атрибутов и вызов метода super().
- Представлен усовершенствованный синтаксис аннотаций типов для обобщенных классов и функций.
- Предоставлен новый способ определения псевдонимов типов при помощи выражения «type».
- В typing добавлен декоратор @override, информирующий системы проверки типов о том, что метод в подклассе предназначен для переопределения метода или атрибута в суперклассе. Декоратор может использоваться для выявления ошибок, связанных с тем, что предназначенный для переопределения метод не выполняет данное действие.
- Для усиления безопасности встроенные реализации алгоритмов SHA1, SHA3, SHA2-384, SHA2-512 и MD5 в hashlib заменены на формально верифицированные варианты от проекта HACL* (встроенные реализации применяются только если отсутствует OpenSSL).
- CPython теперь защищен от переполнения стека.
- pathlib.Path теперь поддерживает подклассы.
- Модуль os теперь предоставляет расширенную поддержку для Windows.
- Модули sqlite3 и uuid получили интерфейсы командной строки.
- В C-API добавлена поддержка «бессмертных» объектов, для которых не применяется подсчёт ссылок.
- Реализована концепция нестабильного уровня C API, предназначенного для использования в отладчиках, JIT-компиляторах и прочих низкоуровневых инструментах.
- Выполнена очистка от устаревших компонентов.
- Модули asynchat, asyncore, smtpd, imp и distutils были удалены (но distutils по-прежнему доступен в пакете setuptools).
- В Си-версии unicode-объектов исключены атрибуты wstr и wstr_length.
- Исключены устаревшие методы из модуля unittest.
- Избавились от устаревших и неэффективных функций, классов и методов, таких как locale.format(), io.OpenWrapper, ssl.RAND_pseudo_bytes(), ElementTree.Element.copy(), hashlib.pbkdf2_hmac(), gzip.GzipFile и других.
- Поддержка устаревших браузеров в модуле webbrowser завершена, включая Grail, Mosaic, Netscape, Galeon и другие до Firefox версии 36.
- С целью будущих оптимизаций пересмотрено внутреннее представление целочисленных значений.
|