2

我运行以下 GNU Smalltalk 脚本:

stdout << 'Before'; nl.
ObjectMemory snapshot: 'image.im'.
stdout << 'After'; nl.

它按预期产生此输出,并写出一个新图像:

Before
After

现在我重新加载图像:

$ gst -I image.im

希望看到的是这个词After被打印出来——从图像保存在原始脚本中的那一点开始执行。实际发生的是我刚刚得到了一个 REPL 。

显然,图像要么没有保存正在运行脚本的线程的状态,要么在加载图像时没有重新创建线程。我认为 Smalltalk 图像应该包含系统整个状态的快照;那么为什么会这样呢?(有什么办法可以使这项工作?我想使用这种行为。)

4

1 回答 1

1

当停止和重新启动一个 smalltalk 图像时,您会遇到可以将一切都是对象的错觉保持多远的界限。不保证可以重新打开数据库连接、套接字、文件等。图像可能会在另一台机器上、另一个网络中以及多年后重新打开。不同的 smalltalks 在如何处理这些问题上做出的选择略有不同。在 Pharo 上运行 Seaside 时,监听新连接的服务器连接会重新启动,Seaside 会话本身会被刷新。

于 2014-09-26T15:55:24.917 回答