什么是Smalltalk"形象"?

Sma*_*alk 27 smalltalk terminology

什么是Smalltalk"形象"?是否像序列化Smalltalk运行时一样?

Rob*_*vey 23

最流行的编程系统将程序代码(以类定义,函数或过程的形式)与程序状态(例如对象或其他形式的应用程序数据)分开.它们在应用程序启动时加载程序代码,并且必须从配置文件或其他数据源显式重新创建任何先前的应用程序状态.应用程序员没有明确保存的任何设置,您必须在重新启动时进行设置.

但是,许多Smalltalk系统不区分应用程序数据(对象)和代码(类).实际上,类本身就是对象.因此,大多数Smalltalk系统将整个应用程序状态(包括Class和非Class对象)存储在映像文件中.然后,Smalltalk虚拟机可以加载映像,以将类似Smalltalk的系统恢复到先前的状态.

http://en.wikipedia.org/wiki/Smalltalk#Image-based_persistence

  • 另一种看待它的方式是,这与使用VirtualBox或VMWare等操作系统虚拟化软件获得的系统映像非常相似.除了图像中的操作系统是Smalltalk系统,它不像文件系统那样组织,而是作为对象组织. (10认同)

rob*_*ect 19

Smalltalk图像是一个非常有趣的野兽.把它看作是一种不朽.许多当前的Smalltalk系统,其中包括Pharo,Squeak,VisualWorks,共享一个共同的祖先,即来自Xerox PARC的Smalltalk图像.然而,这个共同的祖先不是一些遥远的东西,但实际上仍然存在于那些现代系统中.通过向该图像中的对象发送消息来生成现代变体.其中一些消息实际上变形了当前对象.类是完整的对象,通过向类对象发送消息来创建新类.Smalltalk图像中的一些对象可以追溯到1972年,当时第一个Smalltalk图像被引导!Smalltalk图像永远不会消亡,它们只会淡化为可能根本不同的东西.


bla*_*999 8

当smalltalk VM启动时,它会将保存的对象状态(是的:包括打开的文件流,窗口,线程等)从"图像"加载到其内存中,并在保存图像时从它离开时继续执行.在工作期间的任何时候,您都可以"保存图像"(也就是:当前整体状态的快照)到图像文件中.您可以在磁盘上保留多个图像.如果你从事不同的项目,这很有用.图像通常(但不是在所有的小型系统中)可以跨架构移植; 例如,一个吱吱声的图像可以加载到机器人的Windows和Mac(甚至是一个Android)吱吱作响的VM.图像不能跨越方言移植,有时也不能跨越方言中的版本.

图像通常包含所有内容 - 甚至包括调试器,编译器,编辑器,浏览器等.但是,对于部署,有时可以从图像中"剥离"(即删除未使用的东西) - 隐藏秘密(;-)或制作它更小(适用于嵌入式或移动设备).大多数Smalltalks不能没有图像,除了Smalltalk/X和(我认为)S#-Smalltalk(但我在这里......)

要保存和传输源代码,图像无用 - 使用标准格式的文件输出或xml或任何其他传输格式(有许多).图像对于编组/解组也没有用; 使用xml,binarystorage,数据库,glorb或任何其他序列化方法.


Eua*_*n M 5

它正在序列化整个系统中的所有内容,包括所有开发工作和所有用户数据。除了运行时环境的内核之外的一切

Smalltalk 与 Java 一样,运行在运行符号字节码的虚拟机上,它包含垃圾收集器等低级事物。这使得 Smalltalk 非常可移植,并且非常适合一次编写,随处运行。

不出所料,这是 Java 的灵感来源。所以 Smalltalk VM (StVM) 相当于 Java 运行时环境。

在 Smalltalk 中,其他所有内容都存储在 RAM 中。代码库,为 StVM 动态编译。您通过运行垂直和水平最终用户应用程序构建的所有对象数据。您对窗口环境及其外观所做的所有自定义。您编写的所有新代码。您已加载到 VM 以在音乐播放器中播放的歌曲。您正在使用或已加载的任何其他数据、代码或对象。

这一切都存在于 PC 的内存中。

您可能希望定期将当前状态播放保存到磁盘。当您这样做时,您会暂时冻结 Smalltalk VM,并将所有内容复制到单个磁盘文件中。该磁盘文件称为映像文件,默认情况下,在 PC 上的大多数发行版中(无论它们运行的​​是 Linux、MacOS、Windows 还是 RiscOS),它都有一个 .image 后缀。

这就像您在典型 PC 上的文字处理器或电子表格中保存正在进行的工作的方式一样。除了此保存包括电子表格应用程序本身所使用的电子表格代码的最新版本。

Smalltalk 系统确实有其他方法来保护您的数据。如果您开发任何软件,或更改写入 Smalltalk 系统的任何代码库,它会将每次更改实时记录到磁盘。

您可以选择编写代码或加载应用程序,这可以将您的源代码及其相关数据结构保存到分布式源代码存储库或本地磁盘上的存储库。或者到关系数据库。或者对象数据库或新潮的 NoSQL 数据库。

大多数预先编写的应用程序会即时将数据备份到磁盘或数据库。

该镜像是整个 Smalltalk 系统的保存,(除了虚拟机。虚拟机相当于 Java 运行时环境。其他所有内容都存储在镜像中。

写一个新的文件系统来访问底层操作系统的磁盘?那是在图像中。(并且所有更改也已由 Smalltalk 系统自动记录到磁盘)。

将一大堆数据输入到您的 Smalltalk 基于图像的对象数据库中?那是在图像中。

想要对您的 Smalltalk 系统进行出厂重置吗?只需返回使用您第一次安装 Smalltalk 时收到的图像文件即可。想每小时保存一次整点图像,然后恢复到 4 小时前?只需加载四小时前的图像文件。

该映像是Smalltalk 系统内存中所有内容的副本。除了虚拟机这个系统中很小的、不变的、至关重要的部分。