smalltalk的语言核心极为精简,同时message传递的语义也使编程人员更好的理解OO,任何元素都是Object,不像Java,搞出了8个基本类型。
smalltalk有block,block从函数语言的角度看算是lambda(smalltalk设计时借鉴了lisp),似乎Ruby也有block一说,有人说Ruby非常像smalltalk,连reflection的消息都叫inspect。Java8也要有lambda了,哎,java起初参考smalltalk设计时丢到的东西现在又捡回来,所以这充分说明了函数编程的东西是非常有用地。
一般语言都有for/while/if/else控制结构,这些从大学里接触到编程时就刻在脑子里,以为那些控制结构关键字是语言必不可少的语法,在smalltalk这里全部用block实现,精简吧?
在语言设计这个复杂问题上,《黑客与画家》一书中作者认为语言应该保证language core精简,剩下的用library来补充,lisp和smalltalk是说明这个观点的极好例子。可惜的是smalltalk和lisp的命运一样(smalltalk被java替代),被主流市场抛弃,不过似乎它们的语言设计思想却一直传递了下来。
smalltalk的reflection应该让java的反射机制哭,看看thisContext吧。
smalltalk的image设计有点像checkpointing,还像coredump,把所有object state保存到image中,这点java似乎没听说过,java只有java.io.Serializable。
smalltalk 80 bluebook: http://stephane.ducasse.free.fr/FreeBooks/BlueBook/Bluebook.pdf
附上gnu-smalltalk的一个英文文章,文章讲的通俗易懂,稍微懂一点OO的人都应该很容易看懂。
注:smalltalk对objective-C影响极大,连语法都很相似,Objective-C可是现在Apple开发平台的主流。