CPython notes
989 subscribers
9 photos
63 links
Download Telegram
Channel created
3.12 valid syntax
type Alias[T: ([T for T in (T, [1])[1]], T)] = [T for T in T.__name__]
К сообщению выше, стоит сказать что type теперь у нас soft-keyword.
Все это пришло вместе с pep-695.
Если смотреть с точки зрения лаконичности, этот пеп имеет смысл.
В основном, теперь просто не надо создавать тайпвары.
Окей, но не стоит забывать что у тайпваров можно было указать ко/контравариантность. А что с вариантностью в новом синтаксисе? Кстати, вот он -
class Foo[T: int]:
def method(self, arg: T) -> T:
return arg

тоже и для функций
def foo[T: int](arg: T) -> T:
return arg

И к сожалению (как минимум, моему) фичи вида +T -T ~T не доступны. То есть, в таком виде не укажешь вариантность типа.
В итоге, мы имеем <Автовариантность>. На чьи плечи она ложится? На плечи тайпчекеров.
Почему так сделали? Потому что тему вариантности посчитали достаточно сложной и запутанной.
Выводы делайте сами.

По перфомансу с точки зрения создания класса/функции с таким синтаксисом (именно создания класса/функции, а не создания инстанса/вызова функции).
Перфоманс в этом плане, конечно, упал. Байткод у классов/функций которые написаны в "новом стиле" чуть ли не в 2 раза длиннее. Но, так как создание класса/функции у нас происходит один раз, не то что бы это как-то влияло на общую картину(я думаю, что в кодогенерации, результат которой исполняется на лету, никто не использует тайпхинты)
А type как soft-keyword просто замена TypeAlias. Не считаю это тем изменением которое было необходимо.
Теперь я участник Python Triage Team.
https://github.com/python/core-workflow/issues/509
Please open Telegram to view this post
VIEW IN TELEGRAM
Даешь цветные трейсбеки!
https://github.com/python/cpython/pull/112732
Meta* как и обещала выделила людей для реализации NoGIL, и они уже начинают свою работу:

https://github.com/python/cpython/issues/112175#issuecomment-1901015579

*Компания Meta признана экстремистской организацией и запрещена в России