代码之家  ›  专栏  ›  技术社区  ›  thr

相当于JVM的DLR?

  •  12
  • thr  · 技术社区  · 16 年前

    JVM上是否有DLR(DynamicLanguageRuntime for.NET)的等价物?我知道我可以用Java来实现自己的动态绑定和发射自己的字节码。但是有没有任何预先构建的框架(比如DLR),这样我就不必重新发明轮子了?

    2 回复  |  直到 16 年前
        1
  •  12
  •   Jörg W Mittag    16 年前

    DLR是几种不同的东西,有些在Java中有直接的等价物,有些以不同的形式存在,有些没有等价物。其中一些 我们已经有了一个与之相当的平台,其中一些将成为Java7的一部分,还有一些可以从第三方获得。

    运行时绑定器和缓存基础结构

    DLR有一个运行时绑定和缓存基础设施,这使得动态调度快速高效。如何使动态调度与静态调度一样快,并且比C++风格的虚拟表调度快得多,已经知道了20多年,但是大多数动态执行引擎没有采用多态内联缓存、动态类型推理、类型反馈优化等技术。DLR试图提供一个单一的实现,所有基于DLR的语言(包括用于 dynamic 关键字)。

    与此等价的Java是 JSR-292 JDK7 Early Access 不过,它已经发布了一段时间了。)

    DLR,OTOH只是一个库,如果你想的话,你可以把它安装在clr2.0上。事实上,你甚至不需要CLR, 任何 兼容CLI的ve也可以,比如Novell Mono . 由于DLR是开源的,Novell可以从微软网站下载源代码,作为Mono的一部分发布,而无需编写任何代码。。。这正是他们正在做的。Sun对JSR-292的实现也是开源的,但这对IBM、Oracle、Apache、RedHat、GNU等等都没有帮助,因为它非常特定于VM,所以每个JVM供应商都必须自己实现它(还有一个 许多 其中之一,孙 单独地 有四个不同的JVM。)

    Rmi Forax's公司 JSR-292 backport ,它通过字节码重写为旧的jvm实现JSR-292。它是100%兼容,但相当慢。]

    互操作元对象协议

    DLR包含一个拖把 IDynamicObject 接口),它允许所有基于DLR的语言在更高的级别上互操作,并与基于CLI的语言进行更紧密的集成,而不必通过CTS。

    dynalang 项目,它的灵感来源于CommonLisp MOP。但事实上,

    • 尚未广泛使用

    所有这三个可能都会改变,但至少最后一个可能是

    标准化嵌入API

    DLR为基于DLR的语言提供了一个标准化的嵌入API,它允许您在应用程序中嵌入语言运行时,而不必为每个不同的运行时学习不同的API。事实上,你甚至不需要

    javax.script package .

    DLR包含代码的标准表示(DLR树、表达式树)以及用于这些树的解释器和高度优化的编译器,这使得语言实现者能够专注于特定于语言的编译器前端,并让DLR在幕后处理代码生成的细节。

    在Java中没有等价物。

    C#4和VB.NET 10添加了动态类型,以便于与动态语言集成。虽然这在技术上与DLR无关,但它在某些工作中使用DLR。

        2
  •  2
  •   Jon Skeet    16 年前

    我不能说我跟得上这些东西,但我相信 Da Vinci Machine 项目大致相当于DLR。这是一种有些不同的方法,因为它改变了字节码指令集,而不仅仅是一个位于VM之上的库,但是两个项目都有相同的意图:更容易为各自的平台创建高性能的动态语言。

    推荐文章