2

我想错了。我认为 Smalltalk 是单体的东西,但最近我意识到 Smalltalk 被分离为 VM 和图像。在这种情况下,我可以称 VM 是必不可少的部分,而映像只是应用程序的集合。语言语法只是制作图像代码的帮手。

这让我有一些疑问。

  1. 似乎可以在任何 Smalltalk VM 上运行映像。这是真的?例如,我可以从任何 Smalltalk VM 运行 Seaside 吗?

  2. 似乎所有 Smalltalk VM 都应该完全兼容。至少在一组功能和执行源代码方面。这是真的?

  3. 是否可以在裸机 VM 上构建我自己的映像?这不实用,但应该很适合学习。

4

5 回答 5

5

为了回答问题 3),关于图像创建,另一个 POV 是基于生物隐喻的。

从头开始创建图像非常困难,就像从头开始构建活细胞非常困难:需要考虑很多相互作用(创造论者会说你必须是上帝才能做到这一点)。

但是,克隆图像是一个非常简单的操作,就像克隆一个单元格(您只需让它克隆自己)。这很容易,我们通常只是克隆 - 例如,Squeak 和 Pharo 图像现在已有数十年历史了 - 请参阅关于squeak-dev 邮件列表上的对象生命的有趣讨论http://forum.world.st/About-a-object -life-td4653839.html

请注意,gnu-Smalltalk 具有从头开始组装图像的所有工具,并且 Pharo 计划重新创建此类工具。

最后一点,Squeak 关心向后兼容性,最近的解释器 VM 仍然提供必要的接口来运行十年前冻结的图像。

于 2013-03-14T18:29:57.900 回答
3

我将尝试回答您的问题(您肯定这里的其他 Smalltalkers 会提供更多详细信息):

  1. 这似乎可以在任何 Smalltalk VM 上运行映像。这可能吗?例如,我可以从任何 Smalltalk VM 运行 Seaside 吗?

Smalltalk有很多方言,也就是说Image+Vm的组合有很多。其中一些是PharoSqueakVisualWorksDolphinGNU SmalltalkAmberGemstone(我肯定会错过更多)。但是,每个映像都使用其特定的 VM 运行,因为诸如原语或内存管理之类的东西是由每个 VM 定义的。事实上,根据 Smalltalk 的风格,即使在主要版本之间,图像也可能不兼容。

话虽如此,Seaside 是一个特殊的 Web 框架,已被移植到不同的 Smalltalk 风格。因此,您可以在一个 St(例如 Pharo)中编写基于 Seaside 的应用程序,然后将代码导出并导入另一个 St(例如 Gemstone)。

这似乎所有的 Smalltalk VM 都应该完全兼容。至少在一组功能和执行源代码方面。这是真的?

是的,基本概念在大多数 Smalltalks 中是相同的。如果您想与风味兼容,您应该尝试遵守 ANSI Smalltalk 规范,并且您将能够(有些头疼:))跨方言移动代码。但是请注意,这不是常见的事情,因为大多数时候您将使用特定的一个(也许 Squeak/Pharo <=> Gemstone 组合是最常见的,并且 AFAIK 它工作得很好)。

是否可以在裸机 VM 上构建我自己的映像?这不实用,但应该很适合学习。

正如我之前所说,为了做到这一点,你应该注意图像中的许多东西。所以,从技术上讲,是的,你可以,实际上,这很难。Mariano有一系列题为“虚拟机之旅”的博客文章,您会发现这些文章很有趣。此外,AFAIK Tim Budd 创建了Little Smalltalk作为学习资源(我需要找到引用:()。无论如何,有无数人构建自己的 Smalltalk VM 以了解其工作方式的示例。这是一项艰苦的工作,但您肯定会学到很多东西(我知道您要求构建映像,但知道您也可以搭建VM)哦,你可能对这个链接也有兴趣。

高温高压

于 2013-03-14T13:12:33.413 回答
3

不同供应商的 Smallatalk 虚拟机通常不兼容,用一个虚拟机保存的图像不能加载到另一个虚拟机,至少不能直接加载。例外是 Squeak 和 Pharo 映像共享(或大部分时间)相同的 VM 接口。

Seaside 程序可以(并且确实)作为源包在不同 VM 中的图像之间传输。

可以从头开始构建映像,但需要对 VM 有很好的了解。您可能会发现Spoon系统很有趣。

于 2013-03-14T14:55:35.863 回答
1

VM 是 Smalltalk 字节码和系统之间的一层。所以主要思想是当你执行 4 + 5 时,调用一个 VM原语,它执行相应的机器代码来总结这些东西,因为 CPU 不知道什么是“对象”。所以你不能在任何东西上运行任何东西。这就是 NBCog 存在的原因。Native Boost 需要一些在 Cog vm 中没有实现的特殊原语,因此它只能在 NBCog 上工作。我不明白你的第三个问题。VM 采用 smalltalk 字节码并输出机器码。什么是准系统 VM?

于 2013-03-14T12:56:47.823 回答
0

没有图像就无法运行 Smalltalk 虚拟机。这是一个完全没有意义的想法 - vm 的全部意义在于运行映像。这就像在没有图片的情况下运行图片查看器。

于 2013-12-22T05:29:57.310 回答