1.5.2 混合语言

当单一的Java开发已经无法满足当前软件的复杂需求时,越来越多基于Java虚拟机的语言开发被应用到软件项目中,Java平台上的多语言混合编程正成为主流,每种语言都可以针对自己擅长的方面更好地解决问题。试想一下,在一个项目之中,并行处理用Clojure语言编写,展示层使用JRuby/Rails,中间层则是Java,每个应用层都将使用不同的编程语言来完成,而且,接口对每一层的开发者都是透明的,各种语言之间的交互不存在任何困难,就像使用自己语言的原生API一样方便[1],因为它们最终都运行在一个虚拟机之上。

在最近的几年里,Clojure、JRuby、Groovy等新生语言的使用人数不断增长,而运行在Java虚拟机(JVM)之上的语言数量也在迅速膨胀,图1-4中列举了其中的一部分。这两点证明混合编程在我们身边已经有所应用并被广泛认可。通过特定领域的语言去解决特定领域的问题是当前软件开发应对日趋复杂的项目需求的一个方向。

figure_0037_0005

图 1-4 可以运行在JVM之上的语言[2]

除了催生出大量的新语言外,许多已经有很长历史的程序语言也出现了基于Java虚拟机实现的版本,这样使得混合编程对许多以前使用其他语言的“老”程序员也具备相当大的吸引力,软件企业投入了大量资本的现有代码资产也能很好地保护起来。表1-1中列举了常见语言的JVM实现版本。

figure_0038_0006

对这些运行于Java虚拟机之上、Java之外的语言,来自系统级的、底层的支持正在迅速增强,以JSR-292为核心的一系列项目和功能改进(如Da Vinci Machine项目、Nashorn引擎、InvokeDynamic指令、java.lang.invoke包等),推动Java虚拟机从“Java语言的虚拟机”向“多语言虚拟机”的方向发展。

[1]在同一个虚拟机上运行的其他语言与Java之间的交互一般都比较容易,但非Java语言之间的交互一般都比较烦琐。dynalang项目(http://dynalang.sourceforge.net/)就是为了解决这个问题而出现的。

[2]图片来源:http://www.Slideshare.net/josebetomex/oow-2009-towards-a-universal-vm。