什么是Smalltalk"形象"?是否像序列化Smalltalk运行时一样?
最流行的编程系统将程序代码(以类定义,函数或过程的形式)与程序状态(例如对象或其他形式的应用程序数据)分开.它们在应用程序启动时加载程序代码,并且必须从配置文件或其他数据源显式重新创建任何先前的应用程序状态.应用程序员没有明确保存的任何设置,您必须在重新启动时进行设置.
但是,许多Smalltalk系统不区分应用程序数据(对象)和代码(类).实际上,类本身就是对象.因此,大多数Smalltalk系统将整个应用程序状态(包括Class和非Class对象)存储在映像文件中.然后,Smalltalk虚拟机可以加载映像,以将类似Smalltalk的系统恢复到先前的状态.
http://en.wikipedia.org/wiki/Smalltalk#Image-based_persistence
Smalltalk图像是一个非常有趣的野兽.把它看作是一种不朽.许多当前的Smalltalk系统,其中包括Pharo,Squeak,VisualWorks,共享一个共同的祖先,即来自Xerox PARC的Smalltalk图像.然而,这个共同的祖先不是一些遥远的东西,但实际上仍然存在于那些现代系统中.通过向该图像中的对象发送消息来生成现代变体.其中一些消息实际上变形了当前对象.类是完整的对象,通过向类对象发送消息来创建新类.Smalltalk图像中的一些对象可以追溯到1972年,当时第一个Smalltalk图像被引导!Smalltalk图像永远不会消亡,它们只会淡化为可能根本不同的东西.
当smalltalk VM启动时,它会将保存的对象状态(是的:包括打开的文件流,窗口,线程等)从"图像"加载到其内存中,并在保存图像时从它离开时继续执行.在工作期间的任何时候,您都可以"保存图像"(也就是:当前整体状态的快照)到图像文件中.您可以在磁盘上保留多个图像.如果你从事不同的项目,这很有用.图像通常(但不是在所有的小型系统中)可以跨架构移植; 例如,一个吱吱声的图像可以加载到机器人的Windows和Mac(甚至是一个Android)吱吱作响的VM.图像不能跨越方言移植,有时也不能跨越方言中的版本.
图像通常包含所有内容 - 甚至包括调试器,编译器,编辑器,浏览器等.但是,对于部署,有时可以从图像中"剥离"(即删除未使用的东西) - 隐藏秘密(;-)或制作它更小(适用于嵌入式或移动设备).大多数Smalltalks不能没有图像,除了Smalltalk/X和(我认为)S#-Smalltalk(但我在这里......)
要保存和传输源代码,图像无用 - 使用标准格式的文件输出或xml或任何其他传输格式(有许多).图像对于编组/解组也没有用; 使用xml,binarystorage,数据库,glorb或任何其他序列化方法.