这让我有些疑问。
似乎可以在任何Smalltalk VM上运行映像。这是真的?例如,我可以从任何Smalltalk VM运行Seaside吗?
似乎所有Smalltalk VM都应该完全兼容。至少在一组功能和执行源代码中。这是真的?
是否可以在裸骨VM上构建自己的图像?这不太实际,但应该很适合学习。
答案 0 :(得分:5)
回答问题3),关于图像创建,另一个POV基于生物隐喻。
从头开始创建图像非常困难,比如从头开始构建一个活细胞非常困难:需要考虑很多交互(创造论者会说你必须是一种上帝才能做到这一点)。 / p>
然而,克隆图像是一项非常简单的操作,因为克隆一个单元格(你只是让它自己克隆)。这很容易,我们通常只是克隆 - 例如Squeak和Pharo图像现在已有十多年的历史了 - 在squeak-dev邮件列表http://forum.world.st/About-a-object-life-td4653839.html上看到有趣的讨论关于对象生活。
请注意,gnu-Smalltalk拥有从头开始组装图像的所有工具,Pharo计划重新创建此类工具。
最后一点,Squeak关注向后兼容性,最近的解释器VM仍然提供必要的界面来运行十年前冻结的图像。
答案 1 :(得分:3)
我会尽力回答你的问题(你肯定其他的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的一系列blog posts标题为“虚拟机之旅”,你可以发现它很有趣。另外,AFAIK Tim Budd创建了Little Smalltalk作为学习源(我需要找到引用:(无论如何,有无数人建立自己的Smalltalk虚拟机以了解它们是如何工作的。这是一项艰苦的工作,但你肯定会学到很多东西(我知道你要求建立一个图像,但它可能知道你也可以建立一个虚拟机很有用。哦,你可能也对this link感兴趣。
HTH
答案 2 :(得分:3)
来自不同供应商的Smallatalk VM通常不兼容,并且使用一个VM保存的映像无法加载到另一个VM中,至少不能直接加载。例外情况是Squeak和Pharo映像共享(或大部分时间)相同的VM接口。
海边计划可以(并且确实)在不同的VM中作为源包在图像之间传输。
虽然可以很好地理解VM,但可以从头开始构建您的映像。您可能会发现Spoon系统很有趣。
答案 3 :(得分:1)
VM是Smalltalk字节代码和系统之间的一层。所以主要的想法是当你执行4 + 5时,调用VM 原语执行相应的机器代码来对这些东西求和,因为CPU不知道什么是“对象”。所以你不能在任何事情上运行任何东西。这就是NBCog出现的原因。 Native Boost需要一些未在Cog vm中实现的特殊原语,因此它仅适用于NBCog。我不明白你的第三个问题。 VM采用smalltalk字节码并输出机器码。什么是裸骨VM?
答案 4 :(得分:0)
如果没有图像,则无法运行Smalltalk vm。这是一个毫无意义的想法 - 虚拟机的整个要点是运行图像。这就像是在没有图片的情况下运行图片浏览器。