是否有相当于JVM上的DLR(.NET的动态语言运行时)?我知道我可以继续实现自己的动态绑定并用Java发出自己的字节码.但是,是否有任何预先构建的框架(如DLR),所以我不必重新发明轮子?
Jör*_*tag 12
DLR有几个不同的东西,其中一些在Java中有直接的等价物,其中一些以不同的形式存在,其中一些没有等价物.一些那些的做具有同等已经是平台的一部分,有些人会成为Java 7的一部分,有些是由第三方提供.
DLR具有运行时绑定和缓存基础架构,可以快速高效地进行动态调度.如何使动态调度与静态调度一样快,并且比C++式虚拟表调度快得多,已有20多年的历史,但大多数动态执行引擎都没有采用多态内联缓存,动态类型推理等技术. ,类型反馈优化等.DLR尝试提供单个实现,可以由所有基于DLR的语言共享(包括用于dynamicC#4中关键字的C#运行时绑定程序).
与此等价的Java是JSR-292,它使用运行时绑定和缓存基础结构扩展了JVM.DLR和JSR-292之间的主要区别在于JSR-292是在VM级别实现的,这意味着为了使用它,您需要一个新的VM.JSR-292将成为下一个JVM规范的一部分,而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.)
[注:有是一个雷米Forax的JSR-292后向移植,它实现了JSR-292通过字节码重写较旧的JVM.它100%兼容,但很慢.]
DLR包含一个MOP(IDynamicObject接口),它允许所有基于DLR的语言相互之间以及基于CLI的语言在更高级别上进行互操作,并且比通过CTS的集成更紧密.
在Java空间中,等效的是Attila Szegedi(用于JVM的Rhino JavaScript编译器的维护者)dynalang项目,其灵感来自CommonLisp MOP.但是,
所有这三个可能会在某个时候发生变化,但至少最后一个可能不会发生在Java 7上.
DLR为基于DLR的语言提供标准化嵌入API,允许您在应用程序中嵌入语言运行库,而无需为每个不同的运行时学习不同的API.实际上,您甚至不必知道运行时是什么!
与此相当的是JSR-223 Java Scripting API,它自Java 6以来一直是Java平台的一部分,并且位于javax.script包中.
DLR包含代码的标准表示(DLR树,表达式树)以及用于这些树的解释器和高度优化的编译器,这允许语言实现者专注于他们的语言特定的编译器前端并使DLR处理本机 - 幕后代码生成的坚韧不拔.
Java中没有等价物.
C#4和VB.NET 10添加动态类型,以便更轻松地与动态语言集成.虽然这在技术上与DLR无关,但它使用DLR进行一些工作.
Java中没有等价物.
| 归档时间: |
|
| 查看次数: |
873 次 |
| 最近记录: |