Зарелизился 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, но с очень большим и интересным заделом на будущее.