【问题标题】:Different approaches to dynamic typing in the CLR and JVMCLR 和 JVM 中动态类型的不同方法
【发布时间】:2009-10-20 12:58:01
【问题描述】:

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

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

在 Java 领域,人们正在讨论 adding a new dynamicinvoke bytecode to the JVM,以便在中间语言抽象之后由 JIT 处理分派。

many significant parties 支持 Java 方法。

这似乎是两种根本不同的方法。各自的优点是什么,为什么两个阵营选择走不同的道路?我对这两种解决方案的灵活性和运行时性能特别感兴趣。两个虚拟机最终都试图实现相同的目标吗?

【问题讨论】:

  • 虽然我确实不认为 CLR 有任何变化,但有一个新的附加功能,称为动态语言运行时 (DLR),它可以处理动态调度。

标签: java .net clr jvm dynamic-typing


【解决方案1】:

保存中间语言指令集对于托管系统非常重要,因为它会使新应用程序与已安装的运行时不兼容。

例如Sun 在引入泛型时避免改变,这就是为什么在 Java 中实现泛型是半生不熟的。同时,MS 为泛型引入了新指令。

理论上,为动态调用引入新指令为更优化的方法查找打开了可能性(例如inline caching)。

顺便说一句,.NET 4.0 将包含 版本的 CLR,尽管 AFAIK 此版本更改将由更新的系统库引起。

【讨论】:

  • +1 感谢您的回答。是的,我知道这是一个新的 CLR,但是操作码集是一样的。感谢您提供内联缓存的链接。既然是新的 CLR,你知道为什么 MS 决定不趁机引入新的 IL 指令吗?
  • 对不起。没有可靠的信息。但我认为,只要保持兼容性就足够了。
  • 这种兼容性只允许为新 CLR 版本构建的可执行文件在旧 CLR 上运行。但是 BCL 的新版本引入了新的 API,无论如何都会破坏兼容性(例如,即使是最新的服务包 3.5SP1 也破坏了与原始 3.5 BCL 的兼容性),所以我不太相信这里的兼容性论点。一定有别的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
相关资源
最近更新 更多