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

ade*_*rtc 14 erlang scala distributed-computing oz

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

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

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

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

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

And*_*erg 14

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

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

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

编辑2:我应该提到有类型分布式语言的其他有趣的研究项目,例如Acute,其范围类似于Alice ML,或ML5,其使用模态类型来实现更强的移动性特征检查.但他们只是以论文的形式存活下来.


Vin*_*nod 10

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

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

静态类型有助于在编译时自身捕获许多错误,而不是在动态类型的情况下在运行时捕获.在Erlang中尝试静态键入,这是一个失败.但动态类型有助于加快原型设计速度.请查看此链接以获取参考,其中详细介绍了差异.

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

这几个链接可能会有所帮助

BenefitsOfDynamicTyping

静态打字-VS-动态打字

BizarroStaticTypingDebate

  • Erlang建立在其中一个组件的故障不应影响整个系统的概念之上.编程错误,硬件故障或网络故障等被考虑在内:语言包括监督树,监控Erlang进程等功能,这些功能将允许从故障中恢复,分发到不同的节点,处理意外错误,并且永不停止运行.虽然大多数语言和类型系统都旨在使程序无错误,但Erlang认为错误仍会发生,并确保涵盖这些情况.回复:http://learnyousomeerlang.com/types-or-lack-thereof (4认同)