Почему «Динамическая» часть динамических языков так хороша? - PullRequest
6 голосов
/ 14 ноября 2009

Джон Скит опубликовал это сообщение в блоге , в котором он заявляет, что собирается спросить, почему динамическая часть языков так хороша. Поэтому я подумал, что я упреждаю от его имени: что делает их такими хорошими?

Ответы [ 5 ]

8 голосов
/ 14 ноября 2009

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

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

Из этой статьи:

Статическая система типов - это механизм, с помощью которого компилятор проверяет исходный код и присваивает метки (называемые «типами») частям синтаксиса, а затем использует их, чтобы сделать выводы о поведении программы. Система динамических типов - это механизм, с помощью которого компилятор генерирует код для отслеживания вида данных (по совпадению, также называемого их «типом»), используемых программой. Использование одного и того же слова «тип» в каждой из этих двух систем, конечно, не совсем случайно; все же это лучше всего понято как имеющее своего рода слабое историческое значение. Большая путаница возникает в результате попытки найти мировоззрение, в котором «тип» действительно означает то же самое в обеих системах. Это не так. Лучший способ подойти к проблеме - это признать, что:

  • Большую часть времени программисты пытаются решить ту же проблему с статические и динамические типы.
  • Тем не менее, статические типы не ограничиваются проблемами, решаемыми динамическим типы.
  • Также динамические типы не ограничиваются проблемами, которые можно решить с помощью статические типы.
  • По своей сути, эти две техники совсем не одно и то же.
4 голосов
/ 14 ноября 2009

Главное, что вы избегаете большой избыточности, которая возникает из-за того, что программист "объявляет" то, то и другое. Аналогичное преимущество может быть получено с помощью вывода типа (например, boo делает это), но не так дешево и гибко. Как я писал в прошлом ...:

полная проверка типов или вывод требует анализа всего программа, которая может быть довольно непрактично - и останавливает то, что Ван Рой и Хариди, в их шедевре «Концепции, методы и модели Компьютерное программирование "Позвони" полностью Открытое программирование ". Цитирую пост мой с 2004 года: "" "Я люблю объяснения Ван Роя и Хариди, с. 104-106 их книги, хотя я могу или может не согласиться с их выводами (которые в основном Внутренняя разница крошечная - они указывают на Оз и Алису как совместимые языки без и со статическим набрав соответственно) все точки они делают хорошо. Самое главное, Я считаю, способ динамического набора текста позволяет реальной модульности (сложнее с статическая типизация, так как тип дисциплины должен применяться в модуле границы) и "исследовательские вычисления в вычислительной модели, которая объединяет несколько программ парадигмы ".

«Рекомендуется динамическая типизация», они заключить, "когда программы должны быть как гибкий как можно ". Я рекомендую читая Agile Манифест понять, почему максимальная гибкость решающее значение в большинстве реального мира прикладное программирование - и поэтому, почему в указанном реальном мире а не в более академическом круги доктор Ван Рой и доктор Хадиди двигаться, динамическая типизация, как правило, предпочтительнее, а не такая крошечная проблема как они имеют значение быть. Тем не менее, они, по крайней мере, показывают больше осознание проблем, посвящая 3 отличные страницы обсуждения о это, плюсы и минусы, чем почти любой другая книга, которую я видел - большинство книг четко очерчены и сформированы приоритет так или иначе, так обсуждение редко бывает сбалансированным как то;).

2 голосов
/ 14 ноября 2009

Я бы начал с того, что рекомендую прочесть Пост Стива Йегге «Слабый набор текста достаточно» , затем его пост «Динамические языки наносит ответный удар» . Это должно, по крайней мере, начать!

1 голос
/ 14 ноября 2009

Давайте сделаем несколько сравнений преимуществ / недостатков:

Динамические языки:

  • Тип решения могут быть изменены с минимальным влиянием кода.
  • Код может быть написан / скомпилирован отдельно. Мне не нужна реализация или даже формальное описание типа для написания кода.
  • При поиске ошибок любого типа приходится полагаться на юнит-тесты.
  • Язык более лаконичен. Меньше печатать.
  • Типы могут быть изменены во время выполнения.
  • Редактировать и продолжить намного проще в реализации.

Статические языки:

  • Компилятор сообщает обо всех ошибках типа.
  • Редакторы могут предлагать такие подсказки, как Intellisense, гораздо более полно.
  • Более строгий синтаксис, который может расстраивать.
  • Требуется (как правило) больше печатать.
  • Компилятор может улучшить оптимизацию, если знает заранее типы.

Чтобы еще больше усложнить ситуацию, учтите, что такие языки, как C #, идут частично динамически (во всяком случае, на ощупь) с конструкцией var или такими языками, как Haskell, которые статически типизированы, но чувствуют себя динамично из-за вывода типов.

0 голосов
/ 14 ноября 2009

Динамические языки программирования обычно делают во время выполнения то, что делают другие языки во время компиляции. Это включает расширение программы, добавление нового кода, расширение объектов и определений или изменение системы типов во время выполнения программы, а не компиляции.

http://en.wikipedia.org/wiki/Dynamic_programming_language

Вот несколько распространенных примеров

http://en.wikipedia.org/wiki/Category:Dynamic_programming_languages

И чтобы ответить на ваш оригинальный вопрос:

Они медленные, вам нужно использовать простой текстовый редактор, чтобы написать их - никаких подсказок Intellisense или Code, они, как правило, доставляют большую боль в заднице при написании и поддержке. НО самый известный (javascript) работает практически на каждом браузере в мире - я думаю, это хорошо. Давайте назовем это «широкой совместимостью». Я думаю, что вы могли бы получить интерпретатор динамического языка для большинства операционных систем, но вы, конечно, не могли получить компилятор для не динамических языков для большинства операционных систем.

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