При каких обстоятельствах уместны динамические языки? - PullRequest
2 голосов
/ 27 февраля 2009

Я использовал статические языки, такие как C #, Java, C, а некоторые проделали некоторую работу в Javascript, который является динамическим языком.

Вопреки распространенному мнению, я пишу код быстрее на C #, чем на Javascript (и это может быть потому, что у меня больше опыта в C # по сравнению с javascript)

Итак, я хочу понять, что места, где динамический язык подходит и может быть предпочтительнее статических языков.

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

Ответы [ 5 ]

3 голосов
/ 27 февраля 2009

Я бы использовал динамический язык в любое время: простота и гибкость важнее, чем производительность и четкость. Статическая типизация дает компилятору много информации, которую можно использовать для написания действительно быстрого кода сборки. Это также делает контракты явными, возможно, делая разделы кода легче рассуждать отдельно. Однако из-за того, что эти контракты настолько явные и имеют волновые эффекты в таком большом количестве кода, их трудно изменить. В системах, которые требуют высокой степени гибкости, это может привести к большой сложности, чтобы обойти жесткость статической типизации.

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

С другой стороны, я считаю, что хорошая система шаблонов (не C ++) и логический вывод типов могут быть абсолютной находкой. Это позволяет вам иметь лучшее из обоих миров, так как это в основном динамическая типизация времени компиляции. Все еще статически проверяется во время компиляции. Ошибки улавливаются рано, и генерируется эффективный код сборки. Тем не менее, вы сохраняете гибкость в том, что вам не нужно делать контракты явными во время разработки. Насколько я понимаю, Haskell, OCaml и т. Д. Делают это довольно хорошо. Если вам интересен язык с более распространенным интерфейсом, попробуйте D.

3 голосов
/ 27 февраля 2009

Не думаю, что вы можете так обобщать. Динамические / нединамические языки могут быть полезны в одной и той же области, которая состоит практически из всего.

0 голосов
/ 20 марта 2009

Я хотел бы отметить, что динамические языки могут иметь свои типы, неявно определяемые программистом, так же, как и статический язык.

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

Динамические языки являются мощными, хотя их мощность иногда затрудняет их отладку.

0 голосов
/ 27 февраля 2009

JavaScript не лучший пример. Вам стоит взглянуть на Python, Ruby или Groovy.

0 голосов
/ 27 февраля 2009

Одна ситуация, которая показывает полезность динамики C # 4.0. Допустим, у вас есть элемент управления, который может содержать один для двух элементов управления. Оба они имеют свойство DataSource, но этот общий суперкласс не имеет. Чтобы прояснить это, вы можете использовать динамику, чтобы проверить, существует ли свойство на уровне времени выполнения.

Другой сценарий включает изменение класса во время выполнения на основе условия. Допустим, вы хотите, чтобы функция A () находилась в классе B, если только функция C () вернула бы true. Это может быть сделано в JavaScript, но C # не может этого сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...