14 августа вышла бета 3.3.0b1. Релиз для тех, кто собирает расширения: в нём несколько вещей, которые раньше приходилось обходить руками.
🔘 появились
cython.likely() и cython.unlikely() — подсказки оптимизатору компилятора C о том, какая ветка условия ожидается чаще;🔘 реализована конструкция
except * для групп исключений по PEP 654 на Python 3.11 и новее;🔘 аннотации типов у глобальных переменных теперь участвуют в выводе типов, а не игнорируются;
🔘 у сеттеров свойств, объявленных на C, появилась возможность явно пробрасывать исключение вместо безусловной проверки
PyErr_Occurred() после каждого вызова;🔘 поддержан синтаксис однородных кортежей вида
tuple[atype, ...];🔘 набор возможностей общего модуля теперь настраивается при сборке: команда
cython generate-shared принимает --only и --exclude, так что в модуль попадает только нужное.Последний пункт стоит читать вместе с предупреждением авторов: возможность экспериментальная, и если при сборке выключить то, что реально используется, импорт упадёт уже во время работы. Отдельно поменялась схема имён при экспорте и импорте слитых функций на C, но старые имена оставлены для совместимости.
Есть и просто ускорения: форматирование чисел в
f-строках, extend у bytearray байтами, проверки одиночного символа, размер асинхронных генераторов и перевод модулей с большим числом строк. Численных замеров в списке изменений нет, только слова «быстрее» и «меньше», так что судить о выигрыше на своём проекте придётся самому.@zen_of_python