@
Alex_L > OO是把需要跟数据封装在一起的操作进行封装,没必要的还跟数据绑在一起就是有病了。
就是啊,现在大部分号称支持OO的语言就是有病啊,连Integer都要包一堆方法进去啊。再来展示他们高级的boxing/unboxing的技巧。Immutable的量都有方法明显就是病得不轻了啊。
GUI里并发天然多啊。并发是什么?并发就是有很多状态在同时变化,这些状态还相互关联,一个变了,还能引起很多其他状态变化。就类似Alan Kay的那个mini computer metaphor。就刚才说的spreadsheet,每个格子都有一个值,那就是它的当前状态,接着你去改变一个格子值的时候,别的格子如果定义了公式用到了这个格子的值,那也会相应变化,那就是改变了他们的状态,那就是大量并发啊。
> The large scale one was to find a better module scheme for complex systems involving hiding of details
Message Passing就是为了解决这个问题啊。你并不关心另外一个process内部状态是怎么变的,你把他当成一个黑盒,你发个消息过去就好了。那些把各种方法绑到类型里的语言,就是在意淫调用了一下这个方法就是把这个消息发过去了,结果另外一个object挂了,抛了个错,你也得跟着挂了,这也算封装?只有实现真正的消息机制,才算是封装。消息机制的原型就是Simula 67。OO和传统的过程式语言在概念上有啥区别,过程式语言只有一个过程在顺序执行,OO是有多个过程同时或者交替在执行。
> the small scale one was to find a more flexible version of assignment
Pattern Matching就是为了解决这个问题啊。你是希望写
{ok, Result} = do_something()
还是
errno, result = do_something()
if errno:
raise MyException
还是
try:
result = do_something()
except SomeUnexpectedError:
raise MyException
如果你去翻翻各种邮件列表,肯定会发现Alan Kay提到过最早的那个Smalltalk就是Pattern Matching + Message Passing。
最后,不得不引用一句
Erlang is Smalltalk as Alan Kay wanted it
- Niall Dalton