Где Вы извлекаете выгоду из динамического контроля типов?

Как часто Вы используете в своих интересах динамический контроль типов способом, который действительно не был бы выполним на статически типизированном языке?

То, чем я интересуюсь, как часто они используются в реальном мире (а не демонстрация) код?

13
задан Dhana 19 July 2010 в 10:38
поделиться

3 ответа

IMHO, динамическая типизация - это "Meh" в лучшем случае и приводит к большему количеству ошибок в худшем случае, когда речь идет о значениях. Другими словами, я не нахожу никаких преимуществ в отношении значений.

Реальная ценность заключается в потенциале метапрограммирования, который предлагают динамически типизированные языки. Без этого такие фреймворки, как Grails, были бы невозможны. Примером того, что делает Grails, является следующее: Если у вас есть класс домена, добавьте к нему переменную, то фреймворк автоматически помещает метод "findByYourVar" на класс домена, доступный во время выполнения. Таким образом, все общие методы персистентности, которые утомительно писать на Java (или любом другом языке), предоставляются вам фреймворком.

0
ответ дан 2 December 2019 в 01:30
поделиться

Теоретически вы можете по существу "смоделировать" динамический печатать внутри большинства статически типизированных языков, кодируя значения в некотором помеченном объединении и заставляя все операции вести себя правильно в зависимости от входных «типов» (фактически входных значений). Конечно, затем вам нужно будет ввести множество ошибок во время выполнения, которые возникают, когда вы сталкиваетесь с бессмысленными операциями с этими значениями.

Большинство вещей, которые было бы очень, очень сложно сделать, являются либо рискованными, либо просто неправильными. Большое количество крупномасштабных метапрограммирований намного проще в динамически типизированном языке из-за более естественного кодирования отражения, без необходимости создавать экземпляры типов более высокого порядка.

Однако, отвечая на ваш вопрос, я не думаю, что есть какие-либо способы, которыми динамическая типизация обеспечивает функциональность, которую невозможно было бы реализовать на разумном статически типизированном языке.

1
ответ дан 2 December 2019 в 01:30
поделиться

Если честно: большинство преимуществ динамических языков (обратите внимание, что я говорю «динамический язык», а не «язык с динамической типизацией») не имеют ничего общего с самой динамической типизацией (а Python - мой любимый язык. !). Они привлекают так много внимания только потому, что большинство языков со статической типизацией - отстой, когда дело доходит до гибкости. Когда дело доходит до этой темы, на Haskell часто указывают - не без причины. На практике я не вижу большой разницы между тем, что могут делать статические, но выразительные (например, изначально общие) и системы динамических типов.

Основное преимущество, обычно связанное с динамической типизацией, - это обширный полиморфизм / утиная типизация / универсальное программирование. Например. большая часть моего кода Python работает так же хорошо, если кто-то приходит и передает ему что-то другого типа, если в нем есть поля / методы, которые использует мой код (при условии, что они также примерно эквивалентны). По сути, это избавляет нас от хлопот по созданию интерфейса, который является максимально минималистичным и явно реализуется в каждом классе, который мы можем передать этой конкретной функции. Преимущества должны быть очевидны.

Как отмечалось выше, это не связано со статической / динамической типизацией (есть эта структурная типизация штука, которая, по-моему, сводится к утиной типизации с более обширными проверками компиляции во время компиляции). Однако на практике эти два идут рука об руку, поскольку не существует статически типизированного основного языка со структурной типизацией (ML / Ocaml / Haskell / ... совсем не мейнстрим, а Go еще предстоит пройти долгий путь). возможное исключение из шаблонов C ++ (которые являются бесконечной болью по сравнению, например, сHaskell).

8
ответ дан 2 December 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: