Programming in Erlang

上上周搬了家,把宽带迁了,借着青黄不接的几天不能上网的光景,看完了”Programming in Erlang“。

Erlang是一门面向并发和分布式的编程语言。Programming in Erlang以非常浅显的语言,介绍了Erlang的各个方面的基础,是一本合适的入门教材。作为入门教材,能够提到OTP的一些常用内容和常用的分布式设计的思想,已经非常不错了,加上书后的参考。我更感兴趣的是如何使用erlang来构建高并发、分布式系统,包括它的设计模式、部署模式等等,并没有在本书中涉及,非常关键的OTP、Mnesia也仅仅只涉及了一些基础。当然它还是给出了深入学习的途径。

看完了本书,加上翻阅了一些资料,我对Erlang有了更深入的了解,也纠正了一些错误概念:

过去曾认为Erlang就代表高并发,高并发就代表高性能,同时认为Erlang就只是高并发的代名词。其实,Erlang的并发性能也并非最强。首先Erlang的虚拟机是C写的,其次诸如Haskell、OCaml + JoCaml,以及Python的PyPy,其实都能提供不弱于Erlang的并发能力。

同时Erlang在顺序计算上的性能也不佳,甚至不能超过Python、Lua这类脚本语言(也许是和其本身的特殊性质有关)。所以就更落后于Haskell和OCaml这类可编译的语言。然而即使并发和并行也需要顺序计算,所以单从并发性能上来说,Erlang还不是最强的。

Erlang写的Yaws这个Web服务器,虽然能承受高并发,但性能,尤其是IO性能依然无法与lighttpd、nginx这种C写的Web服务相比——Erlang的虚拟机本身也是C写的。

同时,Erlang本身设计为一个结构化编程语言而非面向对象编程语言。这就令其较难应用更有开发效率的面向对象的项目开发流程和方法。

那么为何Erlang在并发、分布式编程中如此受推崇?我认为因为它本身是并发和并行在语义、处理上的一致,所以它编写此类程序更加方便。同时,它提供的是一个关于并发、并行以及分布式的统一的解决方案,而不仅仅是高并发。它的目的是构建有容错能力、有伸缩性的可靠系统,同时又能最简化编程工作。这就是它的真正的优势。

“Programming in Erlang”的3个回复

  1. erlang在网络方面做了很多优化 它的竞争力不在于通用计算而是网络方面的应用。

  2. 这种语言的难点在于其函数式的设计思想
    职业程序员十之八九不能理解没有变量的程序为什么还能叫程序
    可惜让人成为职业程序员最大的麻烦就是他们总不明白什么叫变量赋值
    ErLang的优势就在于它那个NB的虚拟机,除他之外,别家还真就没有这么好的分布式执行环境
    nginx在强大威力在于它真正理解了有限状态机模型,这是跟lambda演算具有同等能力的方法,所以比较他们意义不大

  3. Erlang 的类型系统注定了它在顺序执行时的低效,如果采用了静态类型系统会好一点。另一方面,基于 PI 演算的 Erlang 不能进行全延续优化,导致它也无法超过 Scheme 之类类型系统更加低级的语言。内置数据结构单调,所以也无法超过有工业强度实现的 Python,Lua 之流。

发表评论

电子邮件地址不会被公开。 必填项已用*标注