在最近的一个多月时间里,我利用业余时间学习了Erlang,这是一门面向并发模式编程的语言,她采用函数式的一些思想,加上强有力的库,在20多年的锤炼中,已经算是世界顶级的并发编程语言之一,当然有些不足的是多少年都不变的语法特性使得这门语言的特性比较死板。
先吐槽一下:
1.模块的基本单位是函数,所以你不能导出一个变量,这样我只能通过宏定义来去实现一些匿名函数(但这可能会带来性能上的问题,因为每次都可能创建匿名函数)。
2.没法做延迟计算,所以没法定义一些极限函数。
3.并非真正的FP,这真是刚开始了解到的时候很恼火,spawn(fun() -> test:test(self()) end). 虽然是在函数里运行,但是self()是个副作用函数,我强烈建议Erlang将副作用函数进行标注,就如Clojure一样后缀都加上!
4.少即是多,我同意,但是Erlang的语法糖实在太少了,除了函数、模块和宏没别的了,少不意味着表达力弱啊,但erlang的表达力真的是有点弱,当然模式匹配还是相当方便的说,还有对二进制的处理很是好用
4.很多未公开函数很好,但是却没有文档支持,只能通过阅读源码了解实现,或者去邮件列表找解决方案。
5.实现的一些接口并不是那么的灵活,例如{packet, 2},这个想修改没法改(不包含数据内容长度),只能hack代码,进行编译,很多时候在Erlang语言这层的优化很有限,必须要深入了解她的实现机制,Erlang重在稳定和热更新,效率反倒是其次的,Joe Armstrong说的,只有当你不得不优化代码的时候再去优化吧,先让代码跑起来。
6.我希望能够开放对Module的访问模式,就像Lua一样,可以直接导出更多的匿名函数,这样能少很多很多的敲代码的工作量,还能减少错误,更使得代码看起来更简洁。
7.不好入门,我用了两个星期才算是入道,那种痛苦真的是找不到北,但理解了也就是找到了Erlang解决问题的规范。
8.调试信息看的我累啊,只可能是动态语言和并发语言的通病吗?没用sasl之前,简直是噩梦,用了sasl是眼花。。。
好吧,我还是特别喜欢Erlang的,因为她带给你是整个编程思维的转变,Joe Armstrong估计是不是最早应用Actor模型或者叫SEDA模型的人呢?
在看到第七章-并发的时候,虽然只有两页的篇幅,却道出了Erlang架构体系的设计模式,用了非常拟人的方式介绍了Erlang架构体系的设计精髓。
Joe Armstrong几乎是随意的几句话,却一语道破了Erlang的世界观。在Actor之前,我曾想过如何解决并发的问题,但一直就在锁里转来转去,也想过跳出思维的局限性,可一直没找到好的方式,SEDA这个模型只是了解,没有深入去实现,反倒是这本书彻底给了我方向。
这本书,区区用了四五章就搞掉了几乎Erlang所有的语法特性(期间穿插着实践):
1.数据类型:
a.原子:atom
b.浮点数:number
c.记录:record
d.元组:tuple
e.二进制数据:binary
f.列表:list
g.内建函数:BIF
h.Pid
i.字符串:string
j.引用:reference,
k.函数:fun
l.端口标识: Port Identifier
m.Boolean
2.变量和模式匹配
3.列表解析
4.case/if表达式
5.异常处理
6.模块编译,模块属性,导出,包含.hrl的文件
7.宏定义
8.断言(Guard)
9.消息的发送和接收,超时处理
这本书的实例很多,中文在翻译一些关键的地方的时候,可能是本身中文表达能力在处理科技文献的时候的弱点,必须还是要对照英文进行了解,否则会漏掉一些关键信息。
最后,这本书还是非常值得一读,你不仅能领悟到一门超过20年的语言的设计精髓,还有带给你的是一个Erlang的世界观,只有了解了才知道,绝不后悔。
Erlang程序设计中文版(书评和笔记)
对“Erlang程序设计中文版(书评和笔记)”的回应
《Erlang 程序设计》热门书评
-
一本不错的入门书
19有用 2无用 Arbow 2007-07-17
《Programming Erlang》Joe的新书,买了个电子版,在花了一些时间读了一下之后,发发牢骚,写写读后感。书不太厚,也不薄,500多页,但是单纯附录就占了100+,Appendix F Module and Function Reference,有凑页面的嫌疑。有仁兄打印了整本书,叠起来...
-
很实在的书
9有用 0无用 维修各类UFO 2009-07-15
老头在书里明白的表示了对现在的erlang实现并不非常熟悉,尤其是一些偏门的细节,毕竟erlang的开发已经交由一个专门的小组做,老头可能专心研究容错和并行的理论去了,或者又有啥新的东西要设计。这样带来的好处是老头不像很多语言的创始人那样揪着自己得意却实际没人用的特性大段吹牛,这本书很是实在,讲的点...
-
Erlang程序设计中文版(书评和笔记)
5有用 0无用 Steven 2013-09-14
在最近的一个多月时间里,我利用业余时间学习了Erlang,这是一门面向并发模式编程的语言,她采用函数式的一些思想,加上强有力的库,在20多年的锤炼中,已经算是世界顶级的并发编程语言之一,当然有些不足的是多少年都不变的语法特性使得这门语言的特性比较死板。先吐槽一下: ...
-
最全面实在的erlang学习书
5有用 0无用 eric.33.yu 2010-04-06
Joe老头作为erlang之父写了这个书, 从erlang的设计理念, 到Erlang的语法,开发环境,OTP,到系统的诊断, profile,娓娓道来,顺着他的节奏, 读者会很容易进入这一神奇语言的大门!强烈推荐!http://blog.yufeng.info...
-
更有趣的不是这本
3有用 1无用 wangii 2008-02-02
而是Joe Amstrong的PhD thesis.Declarative和Procedure已经争论了几十年了,现在看来,在multi-core时代Declarative programming有重新崛起的迹象。比较吸引我的地方是这种思路下很多让Procedure Programming很难解决的...
书名: Erlang 程序设计
作者: ARMSTRONG
出版社: 人民邮电出版社
原作名: Programming Erlang: Software for a Concurrent World
译者: 赵东炜 | 金尹
出版年: 2008
页数: 427
定价: 79.00元
装帧: 16开
ISBN: 9787115188694