 |
课程推荐 |
|
|
 |
在线咨询 |
|
 |
| 咨询群: |
41774408 |
| 万老师: |
|
|
|
|
|
|
 |
最新开班信息 |
|
|
 |
最新免费活动 |
|
|
 |
学员交流 |
|
|
 |
朗沃新闻 |
|
|
|
|
|
|
——访Java SE项目负责人丹尼·考沃德
Java SE 6已不再局限于Java语言了,因为SE 6还可以用来执行动态脚本语言代码。据Sun公司Java SE平台项目的负责人丹尼·考沃德(Danny Coward)称,Java虚拟机要成为所有动态语言的最佳执行平台,而提供脚本语言支持只是实现这一计划的第一步。2006年12月11日,Artima记者弗兰克·索莫斯(Frank Sommers)就JSR 292——支持Java 平台上的动态语言特约采访了考沃德。
Java SE 6可以加入对Java平台脚本JSR 223的实现,从而可以被用来执行以Ruby、Python、Groovy或者JavaScript等动态语言编写的脚本语言代码。但是,丹尼·考沃德认为, Java虚拟机是专门为静态语言而设计的,要在这样一个平台上实现动态语言解释器绝非易事。考沃德是Sun公司Java SE平台项目的负责人、JSR 292规范的主要制订者。
在Sun即将发布Java SE 6之前,Artima记者和考沃德进行了一次访谈,其中谈到了Java虚拟机动态语言支持的未来、invokedynamic——一个专用来设计对动态语言对象的支持的新JVM 指令、运行时改变或添加类方法的hot-swapping,以及将Java虚拟机变为动态语言实现理想平台的目标。
弗兰克·索莫斯 : Java SE 6最大的特征之一就是对动态语言的支持。您能向我们描述一下在现有的Java SE版本中,这一目标将得到怎样的实现?今后还会增加哪些对动态语言的支持?
丹尼·考沃德: 在过去的几年里,我们已经注意到了一种现象。和.NET开发者社区不同,Java开发者社区早已经开始体验动态语言了。动态语言逐渐成为许多开发者Java应用开发日常工作的一部分,并常常用于原型开发(prototyping)或用来提高开发速度。为了快速得到更大规模的(Java)应用程序,人们一直在使用动态语言胶合程序部件。
今天,Java平台的脚本JSR 223将与Java SE 6一起发布。在聚集动态语言爱好者这一方面,JSR 223迈出了它的第一步。首先,它为开发者提供了允许将其它语言的代码与Java代码混合起来的API。其次,JSR 223还是一个框架,它允许开发者插入用来解释动态语言的脚本引擎。在Java SE 6中,我们增加了Rhino JavaScript引擎,这样非传统的开发人员也可以使用JavaScript。
开发者也可以使用脚本引擎的框架来插入自己的解释器引擎。我们已经从scripting.dev.java.net 上的java.net脚本项目中收集了二十多种动态语言引擎。这是Java对脚本语言支持的第一阶段,今天我们已经实现交付了。
JSR 292——支持Java 平台上的动态语言是对JSR 223的合理跟进。Java是一门静态类型的语言。Java中的字节码需要知道返回类型是什么以及方法调用的参数类型是什么。
开发者在为动态类型语言写解释器引擎时,不得不硬造出很多Java类型,以便满足Java字节码方法调用的需求。这使得这些解释器很脆弱:代码一旦被人改变,要加入并重新设计所有这些硬造出来的类型将很难。而且,它还会降低执行的速度。有趣的是,Java虚拟机并不需要静态地确定那些类型是什么,只有字节码才要求这样。
在JSR 292中,我们将提供一个新的字节码——invokedynamic。这为Java虚拟机提供了一个方法调用的指令,而无需知道字节码的返回值和方法参数。这是一个很技术、很官方的解释,但是它能够加速Java虚拟机上的解释器实现,并使它们变得更加健壮。
弗兰克·索莫斯:您刚才提到invokedynamic将加快动态语言解释器的执行速度。您能举个例子吗?
丹尼·考沃德:假如你现在要获取一个确定大小的集合(collection),方法的返回类型是Collection。例如,在JRuby中,那种方法可能不需要一个特定的类型返回值就可以得到实现。开发人员可以这样理解,将要返回的是一个集合,但是并没有一个特定的返回(值),因为(R | | |
|
|
|