动态类型和编程分布式系统

时间:2013-04-11 15:53:24

标签: scala erlang distributed-computing oz

来自Scala(和Akka),我最近开始研究其他用分布式计算设计的语言,即Erlang(以及一小部分Oz和Bloom)。 Erlang和Oz都是动态类型的,如果我没记错(将尝试查找链接),人们已经尝试向Erlang添加类型并设法键入其中的一部分,但无法成功强制系统使其适合最后一点?

Oz,虽然是一种研究语言,对我来说当然很有趣,但也是动态输入的。

Bloom目前的实现是在Ruby中,因此是动态类型的。

据我所知,Scala(我认为Haskell虽然我认为最初是作为对纯懒惰函数语言而不是分布式系统的探索而构建的)是唯一静态类型并提供语言级抽象的语言(因为缺乏一个更好的术语)在分布式计算中。

我只是想知道动态类型与静态类型相比是否有固有的优势,特别是在为分布式系统编程提供语言级抽象的上下文中。

3 个答案:

答案 0 :(得分:14)

不是真的。例如,后来发明Oz的同一组在Alice ML做了一些工作,这个项目的使命是将Oz重新考虑为一种打字的功能语言。虽然它仍然是一个研究项目,但我认为这足以证明在这样的环境中可以支持相同的基本功能。

(完全披露:当时我是该组的博士生,Alice ML的类型系统是我的论文。)

编辑:向Erlang添加类型的问题不是分发,它只是一个普遍问题的实例,即在事实永远不会很好的情况下向语言添加类型。另一方面,Erlang仍然有Dialyzer。

编辑2:我应该提一下,对于类型化的分布式语言,还有其他有趣的研究项目,例如: Acute,其范围类似于Alice ML,或ML5,它使用模态类型来更强大地检查移动性特征。但他们只是以报纸的形式存活下来。

答案 1 :(得分:10)

动态类型与分布式系统的静态类型相比没有固有的优势。两者一般都有各自的优点和缺点。

Erlang(Akka的灵感来自Erlang Actor Model)是动态类型的。历史上选择Dynamic typing in Erlang的原因很简单;那些最初实现Erlang的人大多来自动态类型语言,特别是Prolog,因此,拥有Erlang动态是他们最自然的选择。 Erlang的构建失败了。

静态类型有助于在编译时自身捕获许多错误,而不是在动态类型的情况下在运行时捕获。在Erlang中尝试静态键入,这是一个失败。但动态类型有助于加快原型设计。 Check this link for reference which talks a lot about the difference

主观上,我宁愿考虑问题的解决方案/算法,而不是考虑我在算法中使用的每个变量的类型。它还有助于快速开发。

这些链接可能会有所帮助

BenefitsOfDynamicTyping

static-typing-vs-dynamic-typing

BizarroStaticTypingDebate

答案 2 :(得分:0)

Cloud Haskell正在快速成熟,静态类型且非常棒。它没有特色的唯一功能是Erlang风格的热代码交换 - 这是动态类型分布式系统的真正“杀手级功能”(使得Erlang难以静态输入的“最后一点”)。