Strange Cuis退出行为

时间:2017-06-15 08:25:48

标签: smalltalk

尝试Cuis,我发现:

如果我在工作空间中单独评估以下语句,Smalltalks会正确保存图像,然后退出。

Smalltalk saveSession; quitPrimitive.

但是,如果我选择这两个语句然后我尝试一起做, Smalltalks保存图像,但不会退出。

如果我尝试执行以下语句,也会发生同样的事情:

lastModified

有任何解释吗?

1 个答案:

答案 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返回时,在该方法中启动。您可以看到在快照之后处理启动列表,这将是图像“启动”时的第一件事。