《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#,真的会带来新的思维方式。
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#,真的会带来新的思维方式。
相关文章推荐
- 《Scala, Erlang, F#作者讨论函数式语言》有感
- 面向对象的函数式编程语言Scala - 简介安装
- Scala语言:集成面向对象和函数式编程的特性
- Scala语言:集成面向对象和函数式编程的特性
- [小心得]对erlang(函数式语言)的新理解——有关gen_server, supervisor的小小理解
- 学习函数式语言的时机到了scala
- Scala讲座:函数式语言的体验
- Erlang语言的作者教你如何入手
- 使用Scala语言开发Spark应用程序是
- 为什么有的语言变量名首字母不能以数字开头?(欢迎大家讨论)
- Scala语言规范----Array类
- C语言中结构体赋值的讨论
- 又一个函数式编程语言来了?
- 大数据Spark“蘑菇云”行动-第14课Scala集合上的函数式编程实战及Spark源码鉴赏
- 第 1 部分: 使用 Scala 语言开发 Spark 应用程序
- Go语言 关于go error处理风格的一些讨论和个人观点(下)
- 函数式编程语言天生就慢吗?
- Scala学习笔记(1):Scala语言的来源
- Scala语言专题
- Erlang下与其他程序和语言的通信机制