@
akann 因为当OOP是个buzzword的时候,很多语言分别实现了不同的东西,他们都管那叫OOP。
可以认为,Smalltalk是一系列不同的语言,而不是一种语言。Smalltalk 80那个其实也和true OOP没啥关系。最初的时候,Smalltalk 7?(不知道到底是1还是2或者都是)是受Simula 67和PLANNER启发,设计出来的一种语言(好像也没真正实现过),主要特性包括Pattern Matching,Message Passing以及类似后来被称作Actor Model的东西。Alan Kay管那叫实现了OO。他们还开发了另外多种Smalltalk。后来公开的Smalltalk 80就是其中的一种Smalltalk,Alan Kay在很长一段时间内都在鼓吹OO,于是很多人都以为公开出来的那个Smalltalk 80就实现了OO,而现在看上去是连Alan Kay自己在很长一段时间内都搞混了(说OO的时候Smalltalk就指最初的那个,说Smalltalk的时候Smalltalk就指Smalltalk 80了)...
Alan Kay一开始对OO的定义并不是很明确,只是在Simula 67的quasiparallel process的基础上进行改良,可以实现一种容易理解的,可以用来描述某些并发逻辑的模型。Simula 67的quasiparallel process按今天的说法就是coroutine啊。Simula 67里还实现了用于在quasiparallel process之间通信的队列什么的,已经有了一个比较简陋的。或者可以这么说,在1967年,gevent就已经被实现过一遍了。至于怎么改良,改良成什么样,只有一个大概的想法,也没搞清楚哪些是可行的,哪些是不可行的,有没有漏掉了什么。(
http://propella.sakura.ne.jp/earlyHistoryST/EarlyHistoryST.html)
* Everything is an object
* Objects communicate by sending and receiving messages (in terms of objects)
* Objects have their own memory (in terms of objects)
* Every object is an instance of a class (which must be an object)
* The class holds the shared behavior for its instances (in the form of objects in a program list)
* To eval a program list, control is passed to the first object and the remainder is treated as its message
后来,Carl Hewitt在Simula 67和PLANNER的基础上提出了Actor Model的形式化定义。但是他的定义还引入了Capability,导致要完全实现非常困难,一直都没有比较好的实现,也就没有流行起来。后来他又提出了CSP,提供了几乎和Actor Model里的Capability等价的功能。这也就是后来的Newsqueak,Limbo,Stackless Python,Go,Rust这一系列语言所谓的并发模型。但是这就不能算OO了,OO的侧重点是Actor Model里的消息模型。
现在流行的语言里面,接近真正的OO的,也就只有Erlang了。如果你了解Erlang的模型了,你就不会觉得 @
est 的想法有啥好奇怪的了。如果用我的话来不严格的总结一下的话,就是He who is not an Erlang fanboy, does not understand OO。