五大基于JVM的脚本语言
还记得以前本站的一篇文章《如何在Google App Engine上运行PHP》吗,其实那是借用 Quercus, 一个 100% 的用Java 实现的一个 PHP 引擎。今天,这样的东西太多了,能运行在Java的虚拟机JVM上的程序意味着有天然的跨平台性,现在JVM并不单单只能运行Java程序,在JVM上出现了若干使用Java虚拟机运行的脚本程序,比如什么PHP, Python, Ruby等等,这里有一篇文章评论了在JVM上的可以运行的排名前五脚本语言。他们分别是:
- Groovy。构建在强大的Java语言之上 并添加了从Python,Ruby和Smalltalk等语言中学到的诸多特征,为Java开发者提供了现代最流行的编程语言特性,而且学习成本很低(几乎为零),在开发Web,GUI,数据库或控制台程序时, 通过减少框架性代码 大大提高了开发者的效率。支持单元测试和模拟(对象),可以简化测试。无缝集成 所有已经存在的 Java对象和类库。直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。
- JRuby。一个纯Java实现的Ruby解释器。通过JRuby,你可以在JVM上直接运行Ruby程序,调用Java的类库。很多Java编写的Ruby IDE都是使用JRuby来解释语法的。
- Scala。一种多范式的编程语言,设计意图是要整合面向对象编程和函数式编程的各种特性。Scala编程语言近来抓住了很多开发者的眼球。它看起来像是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。Scala的名称表明,它还是一种高度可伸缩的语言。Scala的设计始终贯穿着一个理念:创造一种更好地支持组件的语言。
- Fantom 。Fantom 前身是 (Fan) 是一个基于 Java 和 .NET 平台的编程脚本引擎,用来在运行时产生 JVM 和 .NET 平台的字节码,该语言是面向对象的,跟 Groovy 和 JRuby 有点类似,可通过特定的接口来集成 Java 的类库。
- Jython。Jython由于继承了Java和Python二者的特性而显得很独特。其是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。
下面是一张表格比较了这五大JVM脚本语言:
Groovy | JRuby | Scala | Fantom | Jython | |
---|---|---|---|---|---|
风格类型 | OO / 动态 | OO / 动态 | OO, 过程/ 静态 | OO / 静态 | OO / 动态 |
源语言 | Java | Ruby | N/A | N/A | Python |
运行 | 编译型 | 编译型, 解释型 |
编译型 | 半编译型 | 编译型 |
平台 | JVM | JVM | JVM | JVM, .Net CLR | JVM |
Java集成 | 极好 | 极好 | 极好 | 好 | 极好 |
运行速度 | 好 | 好 | 极好 | 很好 | 慢 |
工具支持 | 广泛 | 还可以 | 广泛 | 几乎没有 | 几乎没有 |
其它一些JVM的脚本语言也我们可以关注一下,如:Clojure, JavaFX, 和IBM的 NetRexx。
(全文完)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《五大基于JVM的脚本语言》的相关评论
OO, 功能/ 静态
这个翻译太业余了吧
“极好”跟”优秀”是哪个更好啊?
比“极好”更好的是“优秀”么?
@ShadowEdge
原来是一个词被翻译了两种东西:
Integration with Java Excellent Excellent Excellent Fair Excellent
翻译的问题,楼上已经有朋友指出了。没看原文,猜测是functional吧,函数式。
我想补充的是,我不认为Groovy对Java的集成好过Scala。从源码级别来看,也许可以这么理解,至少Groovy调用Java没什么特别的障碍;但由Java调用Groovy,就不那么方便了,至少不是无缝的。从运行期看,Scala虽然语法上显得比Groovy偏离Java有些距离,但编译出的Bytecode是直接和Java对应的,这使得从Java调用Scala写的类/API十分方便。
举个例子来说,你可以用Java定义接口,用Scala实现之,然后通过Spring配置直接将其实例化,注入到任何声明使用该接口的bean中。换成Groovy或者JRuby试试?
Jyphon和Python是相同的语法,怎么说没工具支持呢?
当pydev不存在啊?
@ShadowEdge
呵呵,原来是同一个词excellent,为什么要翻译成2个不同的汉语单词?汉语太博大精深了
不是汉语博大精深,是我没有改过来。本来想用“优秀”一词,但“优秀”和“好”在程度上有点模糊了,所以,改成了“极好”,但没有把所有的地方都改过来。就因为这个,大家都有那么大的意见,没有想到,呵呵。
怎么说Jython没有工具支持呢?只要支持Python的工具都支持Jython.作者很明显不太了解Jython。
我认为要想用两种以上在JVM上运行的语言做项目的话…理解JVM指令是啥样的比较重要.就和C语言的很多问题只有学了汇编语言和计算机体系结构才能搞清差不多(吧).
强大的Java语言
看好scala clojure ,但是其中的函数式编程,比较难理解