在Smalltalk VM映像中保存线程

时间:2014-09-26 13:03:09

标签: smalltalk gnu-smalltalk

我运行以下GNU Smalltalk脚本:

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

按预期生成此输出,并写出新图像:

Before
After

现在我重新加载图片:

$ gst -I image.im

我希望期待看到发生的事情是单词After被打印出来 - 执行从原始脚本中保存图像的位置恢复。 实际发生的是我得到一个REPL。

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

1 个答案:

答案 0 :(得分:0)

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