Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Smalltalk 奇怪的崔退出行为_Smalltalk - Fatal编程技术网

Smalltalk 奇怪的崔退出行为

Smalltalk 奇怪的崔退出行为,smalltalk,Smalltalk,通过对CUI的实验,我发现: 如果我在工作空间中单独计算以下语句,Smalltalks会正确地将其保存为图像,然后退出 Smalltalk saveSession. Smalltalk quitPrimitive. 但是,如果我同时选择这两个语句,然后尝试将它们一起执行, Smalltalks保存图像,但不会退出 如果我尝试执行以下语句,也会发生同样的情况: Smalltalk saveSession; quitPrimitive. 有什么解释吗?恢复Smalltalk图像意味着继续保存图像

通过对CUI的实验,我发现:

如果我在工作空间中单独计算以下语句,Smalltalks会正确地将其保存为图像,然后退出

Smalltalk saveSession.
Smalltalk quitPrimitive.
但是,如果我同时选择这两个语句,然后尝试将它们一起执行, Smalltalks保存图像,但不会退出

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

Smalltalk saveSession; quitPrimitive.

有什么解释吗?

恢复Smalltalk图像意味着继续保存图像时正在执行的操作。“保存”意味着拍摄当前对象内存的“快照”

Smalltalk saveSession.
"<-- execution frozen here, this is what happens at startup"
Smalltalk quitPrimitive.
Smalltalk存储会话。

不确定CUI,但很可能saveSession需要停止当前进程(执行时很难保存映像,您必须“冻结”内容)假设可以安全地丢弃,那么它可能不会将该进程恢复到当前点。那么,第二个表达式不被计算的原因是什么?这是一个决定吗?我问,因为第二个表达式也可能在#saveSession之后和启动时执行两次,而我Leandro,我不太明白你的问题。如果你先计算第一个表达式(saveSession),然后计算第二个表达式(quitPrimitive)另外,第二个表达式对保存的快照没有影响,因为它只是在快照已经被创建之后才被执行的。我的问题是为什么决定不评估后面的表达式?一个不同的决定,我认为同样有效,可能是为了保存会话A。然后让进程在以后运行,这样第二个表达式也会被计算。当然,它会在启动时再次计算,但我看不出有什么问题。是吗?不,你误解了。这正是它的工作原理。进程不会停止。进程会继续运行。如果你执行
Smalltalk saveSession;quitPrimitive
然后在启动时执行退出,因为进程仍在运行。啊,也许现在我理解了你的问题:第二个表达式未被计算的原因是它未被选择用于保存前执行。这就是我们所说的“单独计算”:选择第一个表达式,执行它,选择第二个表达式,执行它。
Smalltalk saveSession.
"<-- execution frozen here, nothing more happens at startup"