gpt4 book ai didi

java - 相当于 JVM 的 DLR?

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:00 25 4
gpt4 key购买 nike

JVM 上是否有等效的 DLR(.NET 动态语言运行时)?我知道我可以去实现我自己的动态绑定(bind)并用 Java 发出我自己的字节码。但是是否有任何预先构建的框架(如 DLR)所以我不必重新发明轮子?

最佳答案

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

运行时绑定(bind)器和缓存基础架构

DLR 具有运行时绑定(bind)和缓存基础结构,这使得动态调度快速高效。如何让动态分派(dispatch)和静态分派(dispatch)一样快,而且比 C++ 风格的虚拟表分派(dispatch)快很多,已经有 20 多年的历史了,但大多数动态执行引擎并没有采用多态内联缓存、动态类型推断等技术、类型反馈优化等。 DLR 尝试提供单一实现,该实现可由所有基于 DLR 的语言共享(包括 C# 4 中用于 dynamic 关键字的 C# 运行时绑定(bind)器)。

与此等效的 Java 是 JSR-292 ,它使用运行时绑定(bind)和缓存基础结构扩展了 JVM。 DLR 和 JSR-292 的主要区别在于 JSR-292 是在 VM 级别实现的,这意味着为了使用它,您需要一个新的 VM。 JSR-292 将成为下一个 JVM 规范的一部分,而后者又将成为 Java 7 平台规范的一部分,但这还需要一年左右的时间。 (不过,它已经在当前的 JDK7 Early Access 版本中可用,并且已经有一段时间了。)

DLR、OTOH 只是一个库,如果需要,您可以将其安装在 CLR 2.0 上。实际上,您甚至不需要 CLR,任何符合 CLI 的 VES 都可以,例如 Novell 的 Mono .由于 DLR 是开源的,Novell 只需从 Microsoft 网站下载源代码,并将其作为 Mono 的一部分发布,而无需编写任何代码……这正是他们正在做的事情。 Sun 的 JSR-292 实现也是开源的,但这对 IBM、Oracle、Apache、RedHat、GNU 等没有帮助,因为它非常特定于 VM,所以每个 JVM 供应商都必须自己实现它。 (而且有很多,仅 Sun 就有四种不同的 JVM。)

[注:有Rémi Forax的JSR-292 backport ,它通过字节码重写为旧的 JVM 实现了 JSR-292。它是 100% 兼容的,但速度很慢。]

用于互操作性的元对象协议(protocol)

DLR 包含一个 MOP(IDynamicObject 接口(interface)),它允许所有基于 DLR 的语言相互之间以及与基于 CLI 的语言在更高的级别上进行互操作,并且比必须通过 CTS 进行更紧密的集成。

在 Java 领域,等效的是 Attila Szegedi(JVM 的 Rhino JavaScript 编译器的维护者)dynalang项目,其灵感来自 CommonLisp MOP。然而,

  • 未完成,
  • 尚未广泛使用(尚未)和
  • 第三方库,不属于标准平台。

  • 所有这三个可能会在某个时候改变,但至少最后一个可能不会在 Java 7 中发生。

    标准化嵌入 API

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

    与此等效的是 JSR-223 Java Scripting API,它自 Java 6 以来一直是 Java 平台的一部分,位于 javax.script package 中。 .

    代码表示和编译器

    DLR 包含代码的标准表示(DLR 树、表达式树)以及这些树的解释器和高度优化的编译器,这允许语言实现者专注于其特定于语言的编译器前端,并让 DLR 处理细节问题。幕后代码生成的坚韧不拔。

    Java 中没有等价物。

    静态语言的动态功能

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

    Java 中没有等价物。

    关于java - 相当于 JVM 的 DLR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192175/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com