Динамические системы ввода и программирования распределенных систем
Начиная с Scala (и Akka), я недавно начал изучать другие языки, которые были разработаны с учетом распределенных вычислений, а именно Erlang (и крошечный бит Oz и Bloom). Оба Erlang и Oz динамически типизируются, и если я правильно помню (попытаюсь найти ссылку), люди попытались добавить типы в Erlang и смогли набрать значительную часть, но не смогли успешно принудить систему, чтобы она соответствовала последний бит?
Oz, в то время как язык исследования, безусловно, мне интересен, но это тоже динамически типизируется.
Текущая реализация Bloom находится в Ruby и, следовательно, динамически типизирована.
Насколько мне известно, Scala (и я полагаю, что Haskell, хотя я считаю, что он был построен изначально скорее как исследование в чистых ленивых функциональных языках, а не в распределенных системах) - это единственный язык, который статически типизирован и предлагает язык, (из-за отсутствия лучшего термина) в распределенных вычислениях.
Мне просто интересно, есть ли присущие преимущества динамического набора текста по статической типизации, специально в контексте предоставления абстракций уровня языка для программирования распределенных систем.
Ответы
Ответ 1
Не совсем. Например, одна и та же группа, которая позже придумала Oz, сделала некоторую работу над Alice ML, проектом, целью которого было переосмыслить Oz как типичный, функциональный язык. И хотя он оставался исследовательским проектом, я бы сказал, что это достаточно доказательство концепции, чтобы продемонстрировать, что в такой настройке могут поддерживаться те же основные функции.
(Полное раскрытие: я был аспирантом в этой группе в то время, и система титров Алиса М.Л. была моей диссертацией.)
Изменить: проблема с добавлением типов в Erlang не является дистрибутивом, это просто экземпляр общей проблемы, добавляющей типы к языку после того, как этот факт никогда не срабатывает. С другой стороны, для Эрланг по-прежнему есть Dialyzer.
Изменить 2: Я должен упомянуть, что были другие интересные исследовательские проекты для типизированных распределенных языков, например. Острый, который имел область действия, похожую на Alice ML, или ML5, которая использовала модальные типы, чтобы обеспечить более эффективную проверку характеристик подвижности. Но они выжили только в виде бумаг.
Ответ 2
Нет никаких неотъемлемых преимуществ динамического набора текста для статического ввода для распределенных систем. Оба имеют свои преимущества и недостатки в целом.
Эрланг (Акка вдохновлен моделью Эрланг Актер) динамически типизирован. Динамическая типизация в Erlang была исторически выбрана по простым причинам; те, кто сначала внедрял Erlang, в основном, были получены из динамически типизированных языков, в частности Prolog, и, таким образом, динамика Erlang была для них наиболее естественным. Эрланг был построен с ошибкой.
Статическая типизация помогает улавливать многие ошибки во время самой компиляции, а не во время выполнения, как в случае динамической типизации. Static Typing был опробован в Erlang, и это было провалом. Но динамическая типизация помогает ускорить прототипирование. Посмотрите эту ссылку для справки, в которой много говорится о различии.
Субъективно я предпочел бы думать о решении/алгоритме проблемы, а не думать о типе каждой переменной, которую я использую в алгоритме. Это также помогает в быстром развитии.
Это несколько ссылок, которые могут помочь
BenefitsOfDynamicTyping
static-typing-vs-dynamic-typing
BizarroStaticTypingDebate
Ответ 3
Cloud Haskell созревает быстро, статически типизировано и потрясающе. Единственное, что он не имеет, это замена горячего кода в стиле Erlang - это настоящая "функция убийцы" динамически типизированных распределенных систем ( "последний бит", из-за чего Erlang сложно статически напечатать).