Подтвердить что ты не робот

Где вы пользуетесь динамической типизацией?

Как часто вы используете динамическую типизацию таким образом, чтобы на статически типизированном языке это было бы невозможно?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

В теории вы можете "симулировать" динамическую типизацию внутри большинства статически типизированных языков, кодируя значения в каком-то объединенном теге и делая все операции корректными, основываясь на входных "типах" (фактически на входных значениях). Разумеется, вам нужно ввести кучу ошибок во время выполнения, которые возникают, когда вы сталкиваетесь с бессмысленными операциями над этими значениями.

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

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

Ответ 3

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

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