您的位置:首页 > 其它

《Scala, Erlang, F#作者讨论函数式语言》有感

2010-11-19 15:18 369 查看
在InfoQ上看到一篇有关这几个牛逼函数式语言编程作者在一起讨论的对话,这些牛人对话碰撞出来的火花绝对是智慧啊,所以迫不及待的进去看了。地址是 http://www.infoq.com/interviews/functional-langs。看完以后感觉就是有点晕啊,他们好多关注点确实不一样,有些争论也挺好玩的。大概谈一下吧,毕竟文章很长,不是每个人都愿意看完的。

1. 对于面向对象的理解。

Erlang的作者(后面都省略“作者”两字)说了一个非常形象的比喻,就是要让对象在外面看起来就是black box,这个其实就是说高内聚了。这样外部调用只要进去一个东西,然后就会出来一个结果,说白了就是对象是个无状态的,自身就已经实现了non-locking computation,这也恰恰是函数式编程的魅力。这些大家都不会有任何异议的。

比较有分歧的地方就是对象间的通讯,这里指的是从上层继承或者实现。Erlang采用的delegation的方式,且只有这一种方式,就是用一个process来代理其他process。Scala的做法是利用trait,大家直接就继承同一个实现,比如所有的collections都用一个实现,一个个弄太麻烦了。Erlang就说了,如果是在不同语言间你怎么办?别以为你们jvm下面几个语言还能共通一下,如果是和.net呢?再如果是32bit和64bit间怎么弄?想想确实是个big problem,但是实际会这么用吗?正好问了下同事,告诉我Erlang就是用在网络编程的,很多路由级别的程序用这个语言写的。恍然大悟,原来是完全不一样的应用场景。但是Erlang这种设计的灵活性确实非常高,但负面问题就是使用麻烦点。

最后这几个人感叹了一下,如果type有一个公共的约定,那语言间的问题就没这么多了。历史问题,这个想法是好的,眼下看就是有点太美好了。

2. 现在设计开始更倾向于合适的语言来实现相应的模块,中间通过协议通讯。Erlang确实有支持这种模式的天然优势。

3. 新语言开发的难处。这个Scala主要是用户数量上去了,就算有不合理的地方,但是想大改已经不可能,影响太大了。这就给社区机会去实现自己的模块供用户选择了,比如Akka和Lift就自己从做了actor。但Erlang比较乐观,他认为只要新的东西更好,就算用户要把代码全部重写,只要能在原基础少省略大量代码,用户也会乐意的。这个我保留意见,那么一长串change log,我可不保证每个对兼容性有影响的地方我都会想到,因为升级出了很多bug岂不郁闷?!

我就列出来其中一部分我觉得比较有意思的地方,还有更多细节就自己去品尝原文吧。多看看新语言,特别是以前没接触过函数式编程的朋友来看看Scala、Erlang或者F#,真的会带来新的思维方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: