Динамическая типизация и программирование распределенных систем

Исходя из Scala (и Akka), я недавно начал смотреть на другие языки, которые были разработаны с учетом распределенных вычислений, а именно на Erlang (и немного на Oz и Bloom). И Erlang, и Oz динамически типизированы, и, если я правильно помню (попытаюсь найти ссылку), люди пытались добавить типы в Erlang и им удалось ввести большую часть его, но не смогли успешно принудить систему, чтобы она соответствовала последний бит?

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

Текущая реализация Bloom находится на Ruby и, следовательно, динамически типизирована.

Насколько мне известно, Scala (и я полагаю, что Haskell, хотя я считаю, что изначально он создавался скорее как исследование чисто ленивых функциональных языков, а не распределенных систем) - единственный язык, который имеет статическую типизацию и предлагает абстракции на уровне языка (из-за отсутствия точнее) в распределенных вычислениях.

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


person adelbertc    schedule 11.04.2013    source источник
comment
Текущая реализация Akka в настоящее время не типизирована (для сообщений используется Any). Появление макросов в Scala 2.10 упрощает реализацию типизированной версии. См. Это видео с выставки nescala 2013: nescala.org/#t-14537068   -  person Ionuț G. Stan    schedule 12.04.2013


Ответы (3)


Не совсем. Например, та же группа, которая изобрела Оз, позже поработала над Alice ML, проектом, миссия которого заключалась в переосмыслить Oz как типизированный функциональный язык. И хотя это оставалось исследовательским проектом, я бы сказал, что это было достаточным подтверждением концепции, чтобы продемонстрировать, что те же базовые функции могут поддерживаться в такой обстановке.

(Полное раскрытие: в то время я был аспирантом в этой группе, и система шрифтов Алисы М.Л. была моей диссертацией.)

Изменить: проблема с добавлением типов в Erlang - это не распространение, это просто пример общей проблемы, заключающейся в том, что добавление типов к языку постфактум никогда не работает хорошо. С другой стороны, еще есть Dialyzer для Erlang.

Изменить 2: я должен упомянуть, что были другие интересные исследовательские проекты для типизированных распределенных языков, например. Acute, область действия которого аналогична Alice ML, или ML5, в котором используются модальные типы для более строгой проверки характеристик мобильности. Но они сохранились только в виде бумаг.

person Andreas Rossberg    schedule 11.04.2013
comment
Alice ML, безусловно, выглядит интересно, хотя кажется, что с 2007 года над ним не было никакой активности? Вы знаете, есть ли над этим работать в будущем? Похоже, что Оз (в частности, Моцарт) планирует версию 2 платформы, по крайней мере, согласно активности GitHub. - person adelbertc; 11.04.2013
comment
@adelbertc, Алису до сих пор используют в обучении первокурсников, но, к сожалению, я не знаю о каких-либо планах дальнейшего развития. Re Mozart 2: большая часть первоначального консорциума больше не участвует, и я не уверен, есть ли конкретная временная шкала. - person Andreas Rossberg; 11.04.2013
comment
(обращаясь также к вашему 2-му редактированию) ах, все эти языки кажутся интересными, но, к сожалению, все, похоже, постигла та же участь, которую я видел, как другие исследовательские проекты ... может быть, Блум станет следующим претендентом? - person adelbertc; 11.04.2013
comment
@adelbertc, правда. К сожалению, очень немногие исследовательские проекты обладают ресурсами, необходимыми для превращения проекта в продукт, не говоря уже о его поддержке. - person Andreas Rossberg; 12.04.2013
comment
@AndreasRossberg Alice ML имел необычную поддержку динамической типизации / загрузки модулей, IIRC. Была ли эта поддержка добавлена ​​специально для распределенных систем? - person Steven Shaw; 07.04.2014
comment
@StevenShaw (извините, я как-то пропустил ваш вопрос в то время): В более общем плане, для поддержки того, что мы называем открытым программированием. Примером тому служат некоторые формы распределенного программирования. Но, конечно, такие функции, как динамическое / ленивое связывание, могут быть актуальны даже для нераспределенных приложений. - person Andreas Rossberg; 26.10.2014

Нет неотъемлемых преимуществ динамической типизации перед статической типизацией для распределенных систем. У обоих есть свои преимущества и недостатки в целом.

Erlang (Akka вдохновлен Erlang Actor Model) динамически типизирован. Динамическая типизация в Erlang исторически была выбрана по простым причинам; Те, кто реализовал Erlang сначала, в основном пришли из языков с динамической типизацией, особенно Prolog, и поэтому наличие динамического Erlang было для них наиболее естественным вариантом. Erlang создавался с учетом неудач.

Статическая типизация помогает отловить множество ошибок во время самой компиляции, а не во время выполнения, как в случае динамической типизации. Статическая печать была опробована в Erlang, но безуспешно. Но динамическая типизация помогает быстрее создавать прототипы. Проверьте эту ссылку для справки, в которой много говорится о различиях.

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

Это несколько ссылок, которые могут помочь

BenefitsOfDynamicTyping

static-typing-vs- динамический ввод

BizarroStaticTypingDebate

person Vinod    schedule 11.04.2013
comment
Не могли бы вы подробнее рассказать о том, что Erlang создавался с учетом неудач? - person Andriy Tylychko; 11.04.2013
comment
Erlang основан на идее, что отказ одного из компонентов не должен влиять на всю систему. Учитываются программные ошибки, сбои оборудования или сбои сети и т. Д.: Язык включает такие функции, как дерево наблюдения, мониторинг процессов Erlang и т. Д., Которые позволят восстанавливаться после сбоя, распределять по разным узлам, обрабатывать неожиданные ошибки и никогда не прекращать работу. В то время как большинство языков и систем типов стремятся сделать программу безошибочной, Erlang предполагает, что ошибки все равно произойдут, и старается охватить эти случаи. Ссылка: Learnyousomeerlang.com/types-or-lack-thereof - person Vinod; 12.04.2013

Cloud Haskell быстро развивается, обладает статической типизацией и великолепен. Единственное, чего в нем нет, так это горячей замены кода в стиле Erlang - это настоящая «особенность-убийца» динамически типизированных распределенных систем («последний бит», который затруднял статическую типизацию в Erlang).

person amindfv    schedule 12.04.2013
comment
Когда я недавно посмотрел, он также не включал супервизоров, что является одной из лучших идей, которые Erlang предлагает. Изменилось ли это в последнее время? Конечно, подняв этот вопрос, это все еще не означает, что динамические языки имеют здесь преимущества - Akka предоставляет их для Scala (и Java), поэтому очевидно, что нет никаких внутренних ограничений. - person Thomas Lockney; 12.04.2013
comment
В облачном haskell надзор обеспечивает не библиотека распределенных процессов, а ее надмножество, платформа распределенных процессов. Это еще не было выпущено для взлома, но обеспечивает поддержку генеральных серверов и супервизоров, а также несколько других полезных абстракций, заимствованных из OTP. Первый публичный релиз состоится этим летом - я обновлю эту ветку, когда это произойдет. - person hyperthunk; 06.05.2013
comment
@hyperthunk: Замечательно, приятно слышать! На днях я читал статью по Cloud Haskell, и мне не хватало надзора за стилем Erlang, я с нетерпением жду летнего релиза. - person adelbertc; 11.05.2013
comment
@adelbertc - как вы понимаете, выпуск был сильно задержан, однако он все еще готовится и должен быть доступен к концу февраля. - person hyperthunk; 09.01.2014