Hybridizing OO and Functional Design

 

推荐博文:Tell Above, and Ask Below - Hybridizing OO and Functional Design

文章中把OO和FP讲的深入透彻,里面把smalltalk和haskell作为典型的两种编程范式代表语言,此点本人极为同意,smalltalk可以说是最能体现OO设计的面向对象语言,smalltalk的作者Alan kay也是OO的最早先驱,相比Java而言smalltalk更侧重message的概念,Alan kay也直言在OO中message比object更重要,但在主流OO语言Java却看不到message的影子,这就导致现实中的OO与理想中的OO不一致的情况,根本原因在于同步与异步的区别,smalltalk的message意味着异步,Java的method call意味着同步。个人认为Alan kay一开始设计smalltalk时是想实现个完全异步的OO系统,有点类似Erlang的actor模型(把Erlang中的process看作是object),但是现实中要想实现这样一个完美系统难上加难。说到这里就啰嗦几句Erlang,关于Erlang是OO的讨论一直有,Joe从来都不承认Erlang是一门OO语言,但Joe问他的导师时,Joe的导师却说Erlang是个OO语言,毕竟Erlang还是很像Alan最早提出的OO原型。

 

如smalltalk算是最能体现OO思想的语言,那么haskell就可算是最能体现FP思想的语言,无论从语法,纯洁还有lazy,都有着纯正的FP血液。博文里面说到lazy的前提是purity,这也就容易理解其他FP语言很难实现lazy的原因,如Erlang,side effect才是关键因素。

 

期望未来能有种语言能实现Alan所设想的纯正OO,object之间通过异步消息传递。

你可能感兴趣的:(erlang,haskell)