Это интересная идея, и она уже рассматривалась ранее. Я дам ссылку на некоторые исследования и существующие работы после того, как дам вам свое мнение. Я буду говорить о скриптовых языках и статических императивных языках, поскольку я думаю, что это то, о чем вы говорите.
Фундаментальная проблема заключается в том, что типы не означают одно и то же в статических и динамических системах типов. В динамической системе тип является свойством значения, и по мере того, как передается значение, передается и тип. В статической системе вы ограничиваете типы значений, которые могут храниться в переменных (и т. д.). Все идет нормально.
Статические типы в динамических языках
Проблема возникает, когда вы смотрите на то, как объекты используются в языках сценариев — все они имеют утиный тип. Это означает, что имя типа (номинальное написание) бесполезно. Все современные императивные языки (Java, C#, C++, C) используют номинальные системы типов. Таким образом, в C++ вы можете сказать, что ожидаете Duck
, но в Python вам действительно нужно что-то, что идет quack()
.
Поэтому рассмотрите возможность добавления статической типизации к языку с утиной типизацией. Поскольку функция ожидает от параметра значение quack()
, но не может сказать, что ожидает значение Duck
, объединение этих двух параметров затруднено. Вы можете определить интерфейс с именем quacks
, который может quack()
, и использовать его в качестве типа. Но на самом деле это немного многословно, что убивает преимущества динамической типизации. Однако, возможно, может быть что-то в этом роде (какая-то система структурных типов), которая может сделай это.
Альтернативой было бы просто потребовать от программиста указать Duck
, и в любом случае, черт бы побрал этот бизнес с утиным набором — никто на самом деле не использует его, не так ли? Но тогда вы просто пишете Java на Python, и как человек, который пробовал это однажды, позвольте мне сказать вам, что это очень контрпродуктивно.
Динамические типы в статических языках
Итак, давайте посмотрим на это с другой стороны. Как C# выиграет от ключевого слова dynamic
? Простой ответ: не будет. Честно говоря, я не вижу той красоты и свободы, которые вы получаете от Python в dynamic
C#. Теперь, единственное, что я знаю об этом, исходит из выступления Джона Скита, но ошеломляющее впечатление, которое я получил, состоит в том, что это многословно и неэлегантно. И я думаю, что это не ошибка реализации со стороны C#. Я думаю, это потому, что проблемы, которые динамическая типизация решает в Python, уже решены в C# (хотя и подробно), и dynamic
просто ничего не приносит на вечеринку.
Исследование статических/динамических вещей
Поищите постепенный набор текста Джереми Сиека, это самые передовые статические/динамические исследования. Тем не менее, это немного трудное чтение, и я сам только бегло рассмотрел его, поэтому я не могу обобщить его. Тем не менее, интересно пролистать только его связанные работы и Конференция STOP, вероятно, будет хорошей.
person
Paul Biggar
schedule
02.09.2009