艾伦·凯( Alan )说:“与Java不同,Squeak的运行方式在每台机器上都是一样的--这是我们20年前发明的。”维基百科页面也提到了这一点:
Squeak适用于许多平台,在一个平台上生成的程序在所有其他平台上运行都是相同的。
由于拥有不同指令集的机器显然不能在本地运行相同的程序,如果有人说Squeak在不同的机器上运行相同的程序,而Java却不这样做,这意味着什么呢?
我的印象是编译后的Java类在任何JVM上的任何机器上都是相同的运行,不是吗?
发布于 2009-03-19 16:10:27
显而易见的解释是,在不同的机器上以相同的输入执行相同的图像将导致图像通过相同的比特模式演化。这篇关于Squeak浮点数学的文章意味着浮点在不同平台上具有相同的表示形式。Java要求平台之间的语义是相同的,但允许去角色化表示。Squeak库用于确保跨平台的位相同浮点是Sun的一个浮点,Sun JVM也使用它,尽管他们还提到了用编译器设置来限制它。
发布于 2009-03-19 16:20:18
位-相同一词不仅不能指任何本机代码,还可以指数据操作的处理方式。从一个平台到另一个平台,由于浮点单元硬件实现的不同,存在细微差别,例如浮点数字的最小有效位数。
因此,比特相同也可能意味着这样的差异被删除,每一个指令一点一点地返回每个硬件上相同的结果。这限制了一些硬件的使用,并且需要仿真。我不确定这是否可行,以可接受的成本,或是否有一个很好的伎俩来达到这一点。
发布于 2009-03-19 16:03:07
比特相同意味着Squeak映像本身可以在许多平台上运行,而不仅仅是Squeak源代码。
Smalltalk映像是代码(字节码格式)和活动对象的存储。代码以中间字节码格式提供,VM随后动态编译成特定于平台的机器代码。
https://stackoverflow.com/questions/662681
复制相似问题