|
|
1
12
DLR是几种不同的东西,有些在Java中有直接的等价物,有些以不同的形式存在,有些没有等价物。其中一些 我们已经有了一个与之相当的平台,其中一些将成为Java7的一部分,还有一些可以从第三方获得。 运行时绑定器和缓存基础结构
DLR有一个运行时绑定和缓存基础设施,这使得动态调度快速高效。如何使动态调度与静态调度一样快,并且比C++风格的虚拟表调度快得多,已经知道了20多年,但是大多数动态执行引擎没有采用多态内联缓存、动态类型推理、类型反馈优化等技术。DLR试图提供一个单一的实现,所有基于DLR的语言(包括用于
与此等价的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包含一个拖把
dynalang 项目,它的灵感来源于CommonLisp MOP。但事实上,
所有这三个可能都会改变,但至少最后一个可能是 不 标准化嵌入APIDLR为基于DLR的语言提供了一个标准化的嵌入API,它允许您在应用程序中嵌入语言运行时,而不必为每个不同的运行时学习不同的API。事实上,你甚至不需要 DLR包含代码的标准表示(DLR树、表达式树)以及用于这些树的解释器和高度优化的编译器,这使得语言实现者能够专注于特定于语言的编译器前端,并让DLR在幕后处理代码生成的细节。 在Java中没有等价物。 C#4和VB.NET 10添加了动态类型,以便于与动态语言集成。虽然这在技术上与DLR无关,但它在某些工作中使用DLR。
|
|
|
2
2
我不能说我跟得上这些东西,但我相信 Da Vinci Machine 项目大致相当于DLR。这是一种有些不同的方法,因为它改变了字节码指令集,而不仅仅是一个位于VM之上的库,但是两个项目都有相同的意图:更容易为各自的平台创建高性能的动态语言。 |