我从来没有使用过Smalltalk,但我已经阅读了很多关于它的内容,它一直引起我的兴趣.我已经看到了程序运行的很酷的演示,只需更改程序对象使用的类的方法就可以改变正在运行的程序的行为.它显然是强大的东西,我理解它是如何工作的.我似乎无法确定的是,当您想要添加,删除或重命名该类的实例变量时,现有的类实例会发生什么.
我无法想象如何改变所有类在正在运行的程序中使用的实例变量,并且仍然期望该类的现有实例在之后正确运行.也许我正在添加一个我需要初始化的新实例变量,以及先前已存在的方法已被更改为依赖于此变量的位置.难道我最终没有任何运行代码的可怕故障,该代码具有该类的实时实例?或者,如果实例变量的含义发生了变化,我现在期望在那里存储一种不同类型的对象,而不是以前呢?有某种"升级"机制吗?或者通常的做法是让前面的实例崩溃并烧毁?或者这只是"我们不会在运行程序时做那种事情并希望它们能够存活下来的情况".
我能想到的唯一合理干净的方法是,当您更改实例变量定义时,它实际上可能会创建一个全新的类,并且在更改之前,旧实例继续使用旧的类定义(现在是由于名称被重新定义为新的类定义,因此无法按名称访问.也许这是最合乎逻辑的解释 - 但由于我没有找到任何直接解释这个过程的东西,我想我会问这里,看看有什么样的有趣信息让我感到兴奋.:)