我发现在ANSI Smalltalk规范(草案)中没有提及thisContext
。
我认为ANSI Smalltalk是标准化的Smalltalk-80,所以我无法理解为什么它不存在。他们有什么区别?
答案 0 :(得分:13)
Smalltalk-80指的是一个非常特殊的东西:1980年在Xerox Parc中使用的Smalltalk版本。虽然有许多Smalltalks是基于直接意义上的(Squeak和Pharo)或意识形态感觉(Ambrai Smalltalk和GNU Smalltalk),在这个环境中,今天没有任何Smalltalk实际上完全遵循该书中描述的语言和虚拟机。即使Squeak,可能是最接近意识形态的,也有一些重大偏差:Squeak有封闭,Smalltalk-80没有; Squeak有Unicode,Smalltalk-80没有; Squeak的VM支持并使用命名原语,Smalltalk-80不支持; Squeak支持Smalltalk-80没有的一些字节码;等等。
ANSI Smalltalk与ANSI Common Lisp一样,试图定义一个标准,该标准在主要的Smalltalk实现中包含Smalltalk功能的公共子集。由于ANSI标准是在1998年编写的,因此它必须考虑的不仅仅是原始实现。特别是,一些主要的Smalltalks,如Smalltalk MT和VisualAge Smalltalk,完全没有延续(结果是thisContext
变量)。因此ANSI标准中没有该特征。
在实践中,这些差异在某种程度上是学术性的。你担心thisContext
,但GNU Smalltalk的语法完全不同,VisualWorks有命名空间,Squeak有Traits,Pharo缺少MVC ......只是有更多的紧迫差异。在Smalltalk的生活中,Smalltalk-80和ANSI Smalltalk草案在这一点上都比其他任何指南都要多。