现在各种新语言不断推出,可谓百花奇放。每种语言都有各自的特色,那么,在JVM上,现在有哪些语言呢?
Groovy: http://groovy.codehaus.org/
基于jvm的一种动态语言,在java的基础上增加了很多特性,用起来很方便。但因为其动态语言的原因,性能较java弱。
好消息是,现在有一个groovy++的项目,可以把groovy代码以静态语言方式编译,基本上不需要修改原有代码,就可以达到和java几乎相同的性能。
代码示例:
["Rod", "Carlos", "Chris"].findAll{it.size() <= 4}.each{println it}
它对应的java代码为:
````for (String it : new String[] {"Rod", "Carlos", "Chris"}) if (it.length() <= 4) System.out.println(it);
````<span id="more-345"></span>
**jython: **[**http://www.jython.org/**](http://www.jython.org/)
[Python](http://python.org/)语言在jvm上的实现,对于喜欢python的javaer是很有用的。
**jruby: **[**http://jruby.org/**](http://jruby.org/)
[Ruby](http://ruby-lang.org/)在jvm上的实现,sun公司其开发者招到了自己公司全职开发,只是不知道被oracle收购后,现在的情况如何。
**Clojure: **[**http://clojure.org/**](http://clojure.org/)
Lisp语言在jvm上的实现
**AspectJ: **[**http://www.eclipse.org/aspectj/**](http://www.eclipse.org/aspectj/)
一种面向切面的语言,可以对java类进行增强。功能很强大,可惜在国内应用不多。其eclipse插件功能强大,与java插件配合得很好。
**JavaFx: **[**http://javafx.com/**](http://javafx.com/)
是由sun公司推出的一种脚本语言,用于创建基于Rich Internet Application,与Adobe的[Flex](http://www.adobe.com/products/flex/)和微软的[Silverlight](http://www.silverlight.net/)属于同类产品。
代码示例:
````import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.text.Text; import javafx.scene.text.Font; Stage { title: "Hello World" width: 250 height: 80 scene: Scene { content: Text { font : Font { size : 24 } x: 10, y: 30 content: "Hello World" } } }
它将创建一个窗口,内容为"Hello World"
**现在风头正胜的scala: **[**http://scala-lang.org**](http://scala-lang.org/)
它是一种结合了面向对象及函数式的静态类型语言,提供了很多强大而灵活的特性,对于并发支持很好。
代码示例:
````object HelloWorld extends App { println("Hello, world!") }
复杂一些的,排序:
````def qsort: List[Int] => List[Int] = { case Nil => Nil case pivot :: tail => val (smaller, rest) = tail.partition(_ < pivot) qsort(smaller) ::: pivot :: qsort(rest) }
**Rhino: **[**http://www.mozilla.org/rhino/**](http://www.mozilla.org/rhino/)
Javascript在jvm上的实现。
代码示例:
````import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class RhinoEngine { public static void main(String[] args) { ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName("JavaScript"); // Now we have a script engine instance that // can execute some JavaScript try { engine.put("name", args[0]); engine.eval("print('Hello ' + name + '!')"); } catch (ScriptException ex) { ex.printStackTrace(); } } }
**Kotlin: **[**http://confluence.jetbrains.net/display/Kotlin/Kotlin**](http://confluence.jetbrains.net/display/Kotlin/Kotlin)
一个正在开发中的新语言,由JetBrains公司(即开发Intellij-idea的公司)推出。据说开发它的原因是,觉得scala太复杂(以至于连开发出一个好用的ide插件都很困难),而groovy又是动态语言,所以结合它们的一些优点,创造一种不像scala那样复杂的静态语言(只支持面向对象风格,不支持函数式,这是与scala最大的区别)。
另外由于JetBrains公司本来就是一个开发IDE的公司,所以Kotlin的IDE插件将同语言一起开发,这一点非常重要,也非常有吸引力。
我觉得如果它顺利并且尽快推出,同时编辑器的支持很好的话,会吸引很多的Javaer.
**Mirah: **[**http://www.mirah.org/**](http://www.mirah.org/)
严重借鉴了ruby的语法,但是是一种静态语言,可以看作是“静态的ruby”。它的性能不错,生成的代码不需要额外的库(其它的语言,基本上都需要另外带一个jar)。
代码示例:
````def fib(a:fixnum):fixnum if a < 2 a else fib(a - 1) + fib(a - 2) end end
**Fantom: **[**http://fantom.org/**](http://fantom.org/)
Fantom名字译成中文有点杯具。它的主要特点是,同一个程序可同行运行于java/.net/javascript平台。它在java的基础上,增加了一些高级特性,如函数式、动静态类型、Mixins等。
代码示例:
````// Hello from Fantom! class HelloWorld { static Void main() { echo("Hello, World!") } }