Зарелизился python 3.13, кратенько
перечислю самое интересное, а подробно обсудим на подкасте в первых числах ноября.
Сначала самые интересные штуки, которые пока недоступны конечным пользователям:
- Первый релиз с #nogil (который теперь официально называется free-threaded). Доступен только если собрать интерпретатор со специальным ключом --disable-gil, но если очень хочется поиграться, то можно поставить 3.13.0rc3t с помощью pyenv. Производительность пока замерять рановато, потому что сам по себе питон в free-threaded режиме на 20% медленнее обычного из-за проблем с garbage collector-ом, мы с Никитой Соболевым довольно подробно в подкасте про это говорили, в 3.14 должны поправить, а для тестирования совместимости с библиотеками это пока не важно.
- Новый
copy-and-patch JIT-компилятор, который (сюрприз!) тоже по умолчанию выключен и требует сборки с ключом --enable-experimental-jit. На самом деле если его включить, то какой-то пользы для себя вы не увидите, так как для работы ему требуются "шаблоны", которые будут заменять куски байт-кода на машинный код, а их еще требуется написать. Собственно, его, как и nogil включили в релиз для того, чтобы можно было экспериментировать
Это все выглядит очень интересно, но давайте перейдем к изменениям, которые можно пощупать и которые реально полезны:
- Эксепшены в питоне, итак, были довольно дружелюбны (по сравнению с другими языками), но в последних версиях идет планомерная работа по их улучшению. В этот раз добавили выделение цветом в терминале и более понятное сообщение об ошибке в случае, когда в проекте есть файл, совпадающий по названию с модулем, который ты хочешь импортировать (пример - у меня в проекте есть файл
django.py и я в другом файле пробую импортировать что-то из реальной джанги `from django import forms`)
- Новый клевый repl с подсветкой, возможностью редактировать не только текущую строку, автоотступами, режимами просмотра истории (F2) и вставки (F3) и самое главное – с возможностью писать exit без скобочек 🙂
- Новые улучшения системы типов - дефолты (теперь не надо писать Generator[int, None, None] - можно просто Generator[int]`), возможность объявить атрибут TypedDict-а как `ReadOnly и TypeIs для более строгой проверки типов
- glob("**") из pathlib теперь показывает файлы и папки рекурсивно (раньше показывал только папки), привели в соответствие с тем, как это реализовано в большинстве других инструментов, например ls **
Ну и еще всякое по мелочи. Релиз получился без каких-то больших изменений для тех, кто пишет на python, но с очень большим и интересным заделом на будущее.
https://300.ya.ru/qZNLix0R edited:
• Новый интерактивный интерпретатор на основе PyPy с многострочным редактированием и поддержкой цвета
• Экспериментальный режим многопоточной сборки для повышения производительности
• Предварительный JIT для значительного повышения производительности
• Улучшенная семантика функции locals() для согласованной работы отладчиков
• Модифицированная версия mimalloc для многопоточной сборки
• Убраны начальные отступы в строках документации для сокращения использования памяти
• Новый серверный модуль dbm.sqlite3 для создания новых файлов
• Поддержка macOS 10.13 и выше, отказ от поддержки старых версий
• Поддержка WASI на уровне 2, отказ от поддержки Emscripten
• Поддержка iOS и Android на уровне 3
• Support for type defaults in type parameters.
• A new type narrowing annotation, typing.TypeIs.
• A new annotation for read-only items in TypeDicts.
• A new annotation for marking deprecations in the type system.
• Удаление устаревших модулей: aifc, audioop, chunk, cgi, cgitb, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu, xdrlib, lib2to3
• Удаление устаревших классов, функций и методов в различных модулях стандартной библиотеки
• Удаление и устаревание C API
• Новые устаревшие версии, планируемые к удалению из Python 3.15 или 3.16