14

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

Oz 虽然是一门研究语言,但对我来说当然很有趣,但它也是动态类型的。

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

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

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

4

3 回答 3

15

并不真地。例如,后来发明 Oz 的同一组在Alice ML上做了一些工作,该项目的使命宣言是将 Oz 重新考虑为一种类型化的函数式语言。尽管它仍然是一个研究项目,但我认为它足以证明在这样的环境中可以支持相同的基本功能。

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

编辑:向 Erlang 添加类型的问题不是分布,它只是一个一般问题的实例,即事后向语言添加类型永远不会很好。另一方面,还有用于 Erlang 的 Dialyzer。

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

于 2013-04-11T16:09:09.723 回答
10

对于分布式系统来说,动态类型相对于静态类型没有固有的优势。总的来说,两者都有自己的优点和缺点。

Erlang(Akka 的灵感来自 Erlang Actor Model)是动态类型的。历史上选择Erlang中的动态类型,原因很简单。最初实现 Erlang 的人大多来自动态类型语言,尤其是 Prolog,因此,动态 Erlang 对他们来说是最自然的选择。Erlang 在构建时考虑到了失败。

静态类型有助于在编译时捕获许多错误,而不是像动态类型那样在运行时捕获。在 Erlang 中尝试了静态类型,但失败了。但是动态类型有助于更快的原型设计。检查此链接以供参考,其中讨论了很多关于差异的内容

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

这些是一些可能有帮助的链接

动态打字的好处

静态类型与动态类型

BizarroStaticTyping辩论

于 2013-04-11T16:49:14.880 回答
0

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

于 2013-04-12T01:47:28.323 回答