尝试Cuis,我发现:
如果我在工作空间中单独评估以下语句,Smalltalks会正确保存图像,然后退出。
Smalltalk saveSession; quitPrimitive.
但是,如果我选择这两个语句然后我尝试一起做, Smalltalks保存图像,但不会退出。
如果我尝试执行以下语句,也会发生同样的事情:
lastModified
有任何解释吗?
答案 0 :(得分:3)
恢复Smalltalk图像意味着在保存时继续执行任何操作。 “保存”意味着获取当前对象存储器的“快照”。
Smalltalk saveSession.
"<-- execution frozen here, this is what happens at startup"
Smalltalk quitPrimitive.
如果在一个表达式中调用save并退出,则它将首先快照,并在启动时执行quit。如果单独执行快照,它将在启动时恢复运行用户界面:
Smalltalk saveSession.
"<-- execution frozen here, nothing more happens at startup"
第二个表达式未被评估,因此它不是“在快照中”。
基本上Smalltalk正好从它停止的地方开始 - 没有main
函数,就像在其他编程语言中首先执行一样。 Smalltalk执行只是在快照方法的中间“冻结”,并且当再次启动图像时,它在快照方法中仍然并且只是正常返回。
请参阅SystemDictionary>>snapshot:andQuit:embedded:
。
当snapshotPrimitive
返回时,在该方法中启动。您可以看到在快照之后处理启动列表,这将是图像“启动”时的第一件事。