2012-12-10 105 views
6

我只是好奇,是否有可能转储程序的所有变量和当前状态到一个文件,然后在不同的计算机上恢复它?!
假设我在Python或Ruby中有一个小程序,在给定的条件下,它会将所有当前变量和当前状态转储到文件中。
稍后,我可以在另一台机器上再次加载它,然后返回。
VM快照功能。
我在这里看到过这样的问题,但与Java相关,保存当前的JVM并在不同的JVM中再次运行它。大多数人告诉过,没有这样的事情,只有兵马俑有一些东西,仍然不完美。 谢谢。保存堆栈?

为了澄清什么,我想实现:
考虑2个或更多树莓派的,我试图运行我的软件在P1Nº1,但后来,当我需要用它做什么不同,我需要将软件移动到Pinº2而没有数据丢失,只需很短的休息时间。
等等,以无限数量的机器。

+3

我想象有人会疯狂地使用'pickle',做一些隐约这样的,但它是惊人,脆弱的,可能抓不住一切。无论哪种方式都不好。 –

+2

酸洗整个环境的地址在这里:http:// stackoverflow。com/questions/8232798/python-script-to-pickle-entire-environment – 101100

+1

使用core-dump是可能的,Perl是如何使用['dump'](http://perldoc.perl.org/functions/ dump.html)。你可以在superuser.com上询问如何去做,但是,正如Perl的'dump'文档所说的那样:“...这个函数现在基本已经过时,主要是因为很难将核心文件转换为可执行文件“。 –

回答

1

好问题。

在Smalltalk中,是的。

实际上,在Smalltalk中,倾销整个程序并重新启动的只是存储和共享程序的方式。没有源文件,并且没有办法从平方零开始程序。所以在Smalltalk中,你可以免费获得你的功能。

Smalltalk VM提供了一个钩子,每个对象可以注册以在重新启动后恢复其外部资源,如重新打开文件和Internet连接。而且,例如整数数组被注册到该钩子,以便在转储已被移动到具有不同端的机器的情况下改变它们的值的字节顺序。

这可能会给我们一个预测有多难(或不会)它可能会使我们以一种不支持可恢复转储的语言实现这一目标。

所有其他语言,唉,更少生活。除了一些Lisp实现外,我不知道任何支持从内存转储恢复的语言。

这是错过的机会。

+0

嗨akuhn,我一直在阅读Smalltalk的例子,感谢您的提示,但我不相信Smalltalk是我:) 无论如何,我会给一个镜头。谢谢 –

+0

提及Smalltalk +1。遗憾的是,它在这个问题上的遗产并没有被其所谓的当代工业中的后裔所接受。如此多的可能性,如此多的潜力浪费了。 – Jan

0

我见过马里亚诺证明在最近的Esug会议上使用Pharo Smalltalk中的Fuel(对象序列化)。只要你没有命中没有序列化的对象,你就可以继续调试和运行。 Squeak smalltalk在Pi上运行,并且如果为您保存图像足够好,这很简单。我们仍然在等待为ARM提供更快的JITting VM(作为Google夏季编程计划的一部分)