Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2011-09-22) 基于jvm的语言,有哪些?

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

现在各种新语言不断推出,可谓百花奇放。每种语言都有各自的特色,那么,在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!") } }
comments powered by Disqus