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