CLR和JVM中动态类型的不同实现方法

4

.NET 4.0引入了对动态类型对象调用的新支持。据我所知,这涉及:

  • CLR没有变化
  • BCL中有新类型
  • 新编译器将新语法转换为使用新类型的用法

在Java领域,人们正在讨论向JVM添加新的dynamicinvoke字节码,以便由JIT处理调度,在中间语言的抽象后面进行。

Java方法得到了许多重要方面的支持。

这似乎是两种根本不同的方法。各自的优点是什么,为什么两派选择走不同的道路?我特别关注两种解决方案的灵活性和运行时性能。这两个虚拟机最终都在努力实现相同的目标吗?


虽然我确实认为CLR没有任何变化,但有一个新的添加称为动态语言运行时(DLR),它处理动态分派。 - Joren
1个回答

2
保存中间语言指令集对于托管系统非常重要,因为它可以使新的应用程序与已安装的运行时不兼容。
例如,Sun在引入泛型时避免了更改,这就是为什么Java中泛型的实现不完善的原因。同时,微软引入了新的泛型指令。
理论上,引入动态调用的新指令会为更优化的方法查找(例如inline caching)打开可能性。
顺便说一下,.NET 4.0 将包含CLR的版本,尽管据我所知,这个版本变更是由更新的系统库引起的。

+1 感谢您的回答。是的,我知道这是一个新的CLR,但据我所知,操作码集是相同的。感谢您提供内联缓存的链接。鉴于这是一个新的CLR,您知道为什么微软决定不利用机会引入新的IL指令吗? - Drew Noakes
抱歉,没有可靠的信息。但我认为,在这里保持兼容性就足够了。 - elder_george
兼容性只能允许为新CLR版本构建的可执行文件在旧CLR上运行。但是BCL的新版本引入了破坏兼容性的新API(例如,即使是最近的服务包3.5SP1也破坏了与原始3.5 BCL的兼容性),因此我不太相信这里的兼容性论点。肯定还有另一个解释。 - Drew Noakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接