Java语言运行时(JLR)项目已建立

运行在JVM之上的语言已经存在了很长的时间,几乎与JVM拥有同样悠久的历史。比较早的例子就是Beanshell或Jython语言。Java泛型的概念起源于Java的超集,如Pizza和GJ。不同于Sun公司,微软拥有.NET框架,将.NET虚拟机作为其通用语言运行时(Common Language RuntimeCLR),把它打造成多种语言的支持平台。从开始的C#、VB.NET、Cobol和EiffelSharp,到之后的F#、IronPython,和其它更多的语言比如Delphi,都能在它之上运行。

许多运行在JVM之上的语言获得了小范围的认可,主要专注于像Jython或Beanshell这样的项目,除了一小圈技术狂热者之外,很少有其他的人知道。

微软已经先行一步拥有了动态语言运行时(Dynamic Language Runtime,DLR),并且为(动态)语言应用于CLR提供了更多通用的基础设施,这是一直以来在JVM所独缺的。JVM语言的实现者不得不自食其力找到每一个技巧或者解决方案,这将是一个对于大多数语言实现都会重复出现的过程。相关的例子参见文章编写没有PermGen内存泄漏的代码。

目前,这一切因为JRuby的Charles Nutter与其他JVM语言团队(如Jython、Groovy等等)的沟通而发生着变化。首先是创建 JVM语言的Google Group,在这里JVM语言实现者可以拥有一个共同论坛,来讨论JVM语言实现方面的问题或解决方案。

仅其自身并没有什么特别的报道价值——但是,这个小组的第一次协作已经一枪打响了。Jython的开发团队提供了Jython的包缓存机制的代码并使其对于所有开发者都可使用。为了能让人们有一个公用的地方存放这样的代码,Java语言运行时(JLR)项目就应运而生了,并且项目的源码仓库中已经纳入了上面说的缓存机制的代码。

未来的开发计划将会在JVM相关语言的邮件列表上进行讨论,不过我们已经可以从DLR目前提供的机制中借鉴到今后可能的发展方向。比方说,字节码生成工具就是目前所需的,工具将包含生成元数据的逻辑,就像在生成的字节码中包含源代码语言行数确切位置的调试信息。尽管这并不是一项高精尖科研活动,但是所有的语言实现都不得不从头开始解决这个问题。其它的通用代码则将会包含与Java语言的集成,例如查找重载的方法或是具有varargs方法的逻辑实现。

这不仅是一项可以从实现者肩头卸下的基础设施工作,同时,还会有一个团队来指出哪个字节码对于多种语言特征来说表现最为出色,例如动态方法调用、闭包或者Continuations。因为这些语言拥有不同的语义,所以到底有多少特性可以被共用或改进并放进已有的代码库中,还有待观察。尽管如此,可运行的代码或者概况代码实例还是非常有用的,除此之外,已经证明的可以在当前JVM后端(即由字节码生成本地机器码的即时编译器)进行良好地处理的字节码序列也很有帮助。

查看英文原文:Java Language Runtime (JLR) project created

你可能感兴趣的:(Java语言运行时(JLR)项目已建立)