Где вы выигрываете от динамического набора текста? - PullRequest
13 голосов
/ 19 июля 2010

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

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

Ответы [ 3 ]

8 голосов
/ 19 июля 2010

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

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

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

1 голос
/ 19 июля 2010

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

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

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

0 голосов
/ 19 июля 2010

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

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

...