我将尝试回答您的问题(您肯定这里的其他 Smalltalkers 会提供更多详细信息):
- 这似乎可以在任何 Smalltalk VM 上运行映像。这可能吗?例如,我可以从任何 Smalltalk VM 运行 Seaside 吗?
Smalltalk有很多方言,也就是说Image+Vm的组合有很多。其中一些是Pharo,Squeak,VisualWorks,Dolphin,GNU Smalltalk,Amber,Gemstone(我肯定会错过更多)。但是,每个映像都使用其特定的 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)哦,你可能对这个链接也有兴趣。
高温高压