JVM 平台上的各种语言的开发指南 已翻译 100%

Sub 投递于 2013/06/09 11:16 (共 92 段, 翻译完成于 07-08)
阅读 16453
收藏 164
18
加载中

为什么我们需要如此多的JVM语言?

在2013年你可以有50中JVM语言的选择来用于你的下一个项目。尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的JVM语言么?

如今借助来自像Xtext和ANTLR这样的工具的支持,创建一种新的语言比以前容易多了。个体编码者和群体受突破和改进现存JVM语言,以及传统Java的限制和缺陷的驱使,让许多新的JVM语言应运而生。

新的JVM语言开发者感觉他们的工作室针对现存语言的产物——现存的语言提供了太过受限制的功能,要不就是功能太过繁杂,导致语言的臃肿和复杂。软件开发在一个广阔的范围被应用,于是一种语言的有效性就决定于它跟特定任务领域的相关性,或者它如何在更广泛的范围中通用。所有这一切导致了资源库和框架的开发。

大部分人大谈特谈JAVA语言,这对于我来说也许听起来很奇怪,但是我无法不去在意。JVM才是Java生态系统的核心啊。

James Gosling,
Java编程语言的创造者 (2011, TheServerSide)

LeoXu
LeoXu
翻译于 2013/06/27 15:34
1

如此多的语言存世语言的坟场是否会饱满呢?这里有一个潜在的风险,市面上可供使用的选择太多,将会导致许多语言由于足够的关注和社区贡献而无法生存发展下去。

然而要在这个行业生存下去,必须基于创新和创造——这些往往来自于一个从零开始,并且放弃现有的抱怨和成见,在一块白板上面起家的项目

这里有一条我们将自然而然遵循的线索:现有的语言建设和框架帮助建造起来的社区支持了Java生存,并且也使得下一代Java和新的创意、结构和范式,这些东西的产生成为可能,最终将使它们的方式体现在现存的语言当中。

Rebel Labs的报道了概览了Java 8Scala,Kotlin,Ceylon,XtendGroovyClojure和Fantom但是如此多的JVM语言可供选择我们如何会只看中这8种选择

LeoXu
LeoXu
翻译于 2013/06/27 16:24
1

Rebel Labs 的团队就如何出这样一份报告,还有选择哪种语言,进行了六个月的讨论。最基本的,我们想要呈现给每个人一些东西:Java是一种极其著名,应用广泛的语言,但是Java 8拥有许多我们想要一探究竟的新东西。Groovy,Scala和Clojure已经找到了它们在市场中的核心竞争力,并且变得越来越流行起来,而像Ceylon,Kotlin,Xtend和Fantom在我们的涉猎中相对还比较新颖,需要经受一些考察来获得信任。

我们的目标是建立对每一种语言的认识,它们是如何进化的,未来将走向何方。因此在这份报告中,你将会看到我们阐述对于这些语言的第一印象,包括那些给我们带来震撼的特性,以及不那么能打动人的特性。

你将会看到一个HTTP服务器基础实现的源代码示例,它链接到了GitHub,因此你可以同我们一道来探讨它。

LeoXu
LeoXu
翻译于 2013/06/27 16:37
1

一小段历史

最开始只存在Java,它是用于在JVM上编程的唯一选择。但是这个行业很早就满足了对在JVM上面编程的更多和潜在的选择需求。在脚本领域首先出现了Jython,JVM的一种Python实现,还有Rhino和JavaScript的JVM引擎,它们出现在1997年,跟着就是2000年的BeanShell和2011年的JRuby。

由于对于动态定制应用程序的需哟,在那时脚本设施的需求很旺盛。如今,像Oracle WebLogic和IBM WebSphere这些应用服务器都使用Jython脚本来执行自动化操作,而Rhino也被绑定在Java 6上面,使得JavaScript成了JVM上的一等公民。

jvm languages timeline

LeoXu
LeoXu
翻译于 2013/06/27 16:59
2

然而,脚本设施不是唯一一个让基于JVM的可选编程语言滋生的因素。归因于Java的向后兼容性原则,为了提供一些Java或者它的标准库没有提供的新颖特性,可选语言开始出现了。Scala和Groovy就是最先提供了一些东西超越了Java的成功项目.

我们可以观察到一种有趣的现象:大部分新晋的编程语言都利用了静态类型。使用Scala,Ceylon,Xtend,Kotlin和Java本身的开发者都依赖于在编译时验证目标类型。Fantom在动态和静态类型之间找到黄金的平衡中点,而Groovy,尽管一开始是一种动态语言,但是如今也在其2012年的2.0发行版中也开始加入编译时的静态类型检查了。Clojure——有点Lisp的味道——是坚持使用动态类型,但唯一还收到合理拥泵的JVM编程语言,然而一些在企业的大型团队中工作的开发者择认为这会是Clojure的一个缺陷。

LeoXu
LeoXu
翻译于 2013/06/27 21:28
2

运行在JVM上的新的编程语言,已经有从定制化应用程序的动态脚本语言,向着一般意义的静态的应用程序开发语言改变的趋势。

Java仍然是最常使用在JVM上的编程语言,而随着Java 8发行版的到来,Java将尝试在语法美学和多核编程方面,跟上时代的潮流。

LeoXu
LeoXu
翻译于 2013/06/27 17:06
1

在 Github Repo 上代码样例

在几个JVM语言的引擎下这会变的很geek。 在这篇文章中,我们从新的角度看Java(换句话说, 在Java 8中), Scala, Groovy, Fantom, Clojure, Ceylon, Kotlin 和Xtend–mostly, 并且给出最吸引我们和我们最深刻的印象。

每一个语言都有自己的 HTTPServer 样例 ,它们都在 github 上。你可以检查我们的代码,所有在这篇文章的JVM 语言 都在这:

github image

https://github.com/zeroturnaround/jvm-languages-report

蒋锴
蒋锴
翻译于 2013/06/27 13:13
1

JAVA 8

“我真正关心的是Java虚拟机的概念,因为是它把所有的东西都联系在了一起;是它造就了Java语言;是它使得事物能在所有的异构平台上得到运行;也还是它使得所有类型的语言能够共存。”

James Gosling,
Java编程语言的创造者 (2011, ServerSide)

Java 8 入门

JavaSE 8.0是值得期待的。

让我们来看一看Java平台的总体演变策略:

  1. 不去打破二进制代码的兼容性
  2. 避免引入源代码级的不兼容
  3. 管控行为方式级别的兼容性变更
LeoXu
LeoXu
翻译于 2013/06/27 21:38
1

简单来说,目标就是保持现有的二进制文档能够链接并运行,并且保持现有的源代码编译能够通过.向后兼容的政策已经影响到了Java这种语言的特性集,同时也影响到了这些特性如何被实现.例如,使用目前的Java特性不可能促进API的进化,因为变更接口可能会打破现有依赖于JDK接口的资源库,其源代码的兼容性.这就产生了一个同时影响到语言和JVM的改变.

随着Jigsaw——模块化的主题——正从Java 8中取缔,Lambda项目成为了即将到来的发行版中最重要的主题.尽管其名号有一点点误导性.但是lambada表达式确实是其一个重要的部分,它本身并不是什么重要的特性,但却是Java在多核心领域做出努力的一个工具.

这个多核心的时代有对于并行库的需求,并且也对Java中的集合(Collection)API造成了压力.这下就需要lambda表达式使得API更加友好和易于使用.防御式方法是API革命的工具,并且也是现存的集合库将如何向支持多核迈出步伐的基础.

LeoXu
LeoXu
翻译于 2013/06/27 22:01
3

那么你想要使用lambda,嗯?

如果你熟悉其它包含lambda表达式的语言,像Groovy或者Ruby,你将会惊喜与它在Java中是如此简单.在Java中,lambda表达式的作用表现在"SAM类型"——一个拥有抽象方法的接口(是的,接口现在可以包含非抽象的方法了——叫做防御方法)。

那么举个例子来说,著名的的Runnable接口可以完美地适合于作为一个SAM类型提供出来:

Runnable r = ()-> System.out.println("hello lambda!");

这也同样适用于Comparable接口:

Comparator<Integer> cmp = (x, y) -> (x < y) ? -1 : ((x > y) ? 1 : 0);

同样也可以像下面这样写:

Comparator<Integer> cmp = (x, y) -> {
 return (x < y) ? -1 : ((x > y) ? 1 : 0);
};
这样就看起来似乎像是一行lambda表达式拥有隐式地语句返回了.

LeoXu
LeoXu
翻译于 2013/06/27 22:14
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(19)

尹彬
好文。。
唐海康
唐海康
曾经看过一个论调,java需要被重写。jvm也应该被重写,个人还是挺赞同这个观点的。JVM如果不想死掉,改变是必须的,但是在原有基础上修修改改的话并不能完全解决问题,根本上来说:JVM的字节码和架构,特别是字节码方面,重新进行设计我个人觉得是可行的,而且是有利的。可以尝试在原有的字节码指令集上面新建或者扩展一套指令集,然后在十年内发布几个过渡版本,但是随之而来的兼容性问题或许会要了jvm的命。
LastRitter
LastRitter
好长的文章,辛苦了!
skyim
skyim
大家都是花时间翻译出来的,你感觉哪里翻译的不好,你可以指出来,如果是我翻译的错误,我会去改正,翻译也是比较辛苦的,没必要太较真
YANGL
YANGL
clojure
asdjflls
asdjflls

引用来自“cokolin”的评论

想学Scala和Clojure,有些翻译感觉太生硬了。

其他的不知道,但Clojure那一段绝逼是机器翻译。
MikeManilone
MikeManilone

引用来自“ak_birdofprey”的评论

GPLV3的才是最N的,就象软件世界里的魔法石,想要得到的人就可以得到,但想拘为己有是不可能的。呵呵,这也是为什么BSD授权协议的兼容性更好,可是为什么GPLV2的LINUX会走红的原因之一吧

你理解錯了,是因爲BSD當年官司纏身,Linux是後起沒有版權問題,許多BSD大牛才來到Linux的。當年的Linux其實根本算不得一個能用的內核。
E
Ellipse
因为用过scala,对java8的lambda倒是没什么太大的兴趣。目前clojure中。
期待模块化很久了,看来还要再等个1、2年...
cokolin
cokolin
想学Scala和Clojure,有些翻译感觉太生硬了。
xesam
xesam
新的语言哪有java这么重的包袱,所以别老黑java。
返回顶部
顶部