#python #python_3x #language_lawyer #дизайн_языка #типизация
Здравствуйте! В питоне есть type hint`ы, однако код вроде такого: def add(a: int, b: int) -> int: return a + b add('hello', 'world') отлично выполняется. Я знаю, что для проверки типов есть внешние утилиты, но не понимаю: почему синтаксис в язык добавили, а проверки из коробки нет? Ведь внешние утилиты могут проверять без какого либо дополнительного синтаксиса, почему так активно такая идея начала обсуждаться только сейчас. Что-то такое, кажется, не сложнее парсить: #: int, int -> int def add(a, b): return a + b #: [int] li = [1,2,3] В том же js есть "strict mode", который можно включать и выключать по собственному желанию, мне кажется, что это намного логичнее. Понятно, что задачи у них разные, но ситуации, кажется, похожи.
Ответы
Ответ 1
Type hint'ы введены PEP 484. Держите под рукой. почему синтаксис в язык добавили, а проверки из коробки нет? Вообще на любые вопросы "почему в языке Х нет фичи Y", при отсутствии явного отказа от неё, ответ "не сделали ещё, может быть когда-нибудь". Но в PEP 484 есть предложение, очень похожее на отказ делать это частью языка: It should also be emphasized that Python will remain a dynamically typed language, and the authors have no desire to ever make type hints mandatory, even by convention. Важно также отметить, что Python останется динамически типизированным языком, и его авторы не намереваются когда-либо делать type hint'ы обязательными, даже если лишь по соглашению. Хотя это напрямую не исключает возможности появления необязательных проверок в стандартной библиотеке, это стало бы существенным шагом в сторону "статической типизации по соглашению", чего авторы языка не хотят. Как бы там ни было, type hint'ы должны стабилизироваться в языке, прежде чем основывать на них такую крупную фичу, как встроеннные проверки. А это случится не раньше Python 3.8. Ведь внешние утилиты могут проверять без какого либо дополнительного синтаксиса Да, но: Каждый анализатор вынужден для этого вводить собственный синтаксис. Возможно, когда-нибудь разные реализации пришли бы к общему де-факто стандарту. А можно сделать "превентивный стандарт", чтобы исключить другие развития событий на корню. Этот синтаксис должен затруднять написание аннотаций, несовместимых с описываемым кодом. Комментарии очень легко сделать несовместимыми с кодом, чтобы это не случилось, нужны дополнительные проверки самого кода. Разбирать сам код на Python разумно парсером Python, а не создавать и поддерживать его кусочек по новой. И если уж заставлять этим заниматься парсер Python, можно интегрировать синтаксис плотнее в язык, например указывать тип аргумента непосредственно рядом с ним. Что уже сделано аннотациями в PEP 3107, но аннотации постепенно становятся только type hint'ами и больше ничем.
Комментариев нет:
Отправить комментарий