The product itself is at 1.0 status, but access is restricted tovery limited partners.Other software houses are also exploring the concepts, amongst them JetBrains, wellrespected for their IntelliJ IDEA Java IDE, who have recently released the 1.0 version of theirMeta Programming System (MPS). MPS doesn't use a parser, instead working with theAbstract Syntax Tree (AST) directly. It provides a text-like projectional editor which allowsthe programmer to manipulate the AST, and is used to write languages and programs. Foreach node in the tree a textual projection is created - as the programmer works with theprojection, the change is reflected in the node. This approach allows you to extend and embedlanguages in any combination (often referred to as language composing) promoting languagere-use. JetBrains are using the product internally and have recently released YouTrack, a bugtracking product developed using the system.ConclusionIn language development there is always a trade-off between stability and progress. Theadvantage that all of these techniques bring is that they don't affect the platform or the language. In consequence they are more tolerant to mistakes and are therefore moreconducive to rapid and radical experimentation. With developers freely able to experiment weshould begin to see more people separately tackling the poor signal to noise ratio of somecommon boilerplate such as the anonymous inner class syntax, mixing and evolving theseideas to some optimum form that adds the most value in the most cases. It will be fascinatingto see how developers use these different approaches to push the Java platform in newdirections.
James Gosling 在“The Feel of Java”中说过:Java是一种蓝领语言,它并不是博士的论文材料而是可以完成工作上的语言。很多不同的程序员都非常熟悉 Java,因为我有一种趋势去选择普及的东西,这是一个不错的选择。Java 的这种成功证明了它的这种方法是正确的, 如果Java 今天仍然以这个为目标,那么它的语言演进将变得很缓慢。Java 作为一个成熟,使用广泛的语言也将导致其演进过程充满了困难。一方面,每个特性添加到语言中都有可能造成不可预知到后果,这么做会疏远那些熟悉 Java 的人,另一方面,本身很完美的特性可能在与其他特性进行交互时产生未知的影响。更糟的是,一旦增加了某个语言特性,几乎就不可能再将它移除,即使这个特性会对整个语言产生危害也没办法。语言设计者为了证明某个特性是正确的,应该从长远的角度来考虑,不应该在短期内解决这个问题,而之后就变成了多余的。为了降低风险, 语言设计者一般会创建单独的一种语言或者分支来进行试验, 比如 Pizza语言就是在完成前用来测试 Java 泛型的。这种方式的问题在于试验的参与者是比较少的人群,并且是自愿的。他们对语言特性很感兴趣,很多人是学者或者研究员。但是,在普通的程序员使用这些特性时,那些学者或是研究员认为很好的特性可能变得很糟。为了感受一下这种情况,请考虑Java7 闭包特性的激烈争论。很长时间以来有人在提案中给出了闭包的实现,但最终却还是没有达成共识。论文网
然后,Sun 公司不在 JDK7 中添加完整的闭包支持。争论的焦点转向为添加泛型会不会导致 Java 变得越来越复杂,在Java 中已经通过匿名内部类部分实现该功能的情况下,完整闭包还是正确的吗。需要完整闭包支持的是简化fork/join API(添加到了JDK7中以改进多核编程)的使用以及清理资源。Josh Bloch 的 ARM block 提案对第二个问题给出了另一种解决方案。Cliff Click博士在面向 Java 的可扩展,非阻塞变成风格的研究中给出了关于 fork/join 的另一种方案,这种方案随着核心处理器的不断增加看起来也很合理,如果这种成为可能的话,那么 Java 中使用闭包的地方将会很少了,语言就不需要提供这个特性了。虽然这样,但是对编程语言来说。不断的平稳发展还是非常重要的。因此下面讲了3 种技术,向 Java 中增加新的语言特性而又不改变语言本身,他们是客户化领域特定语言(DSL) 、Java6 的注解处理器(用库来添加可选择的语言特性)以及将语法糖从语言般向 IDE。每个技术都能让主流开发者用非侵入方式体验这些新特性,好的想法可以融合到语言核心当中。客户化DSL在这 3 个技术中,讨论最多的还是特定领域语言或者说是 DSL。关于 DSL 的定义有很多争议,但是为了方便我们讨论,我们把它当作一个简单的语言而不是一个解决计算机问题的语言。那样DSL 就不是图灵完备的了。当然也有边缘情况,例如,Postscript是图灵完备的语言但是也可以作为DSL 来定义。正如上面的例子,一个DSL 也不是新的想法。其他熟悉的 DSL 包括正则表达式,XSLT,Ant 和 JSP,所有这样都需要一个定制的分析器排序,来处理他们。Martin Fowler 也指出 interfaces/API可以被认为是一个第二种类型的内部 DSL。 他认为一个内部 DSL 应该被开发语言直接开发,这是 Lisp 和Smalltalk 程序员普遍的做法,以及最近 Ruby 社区也一直致力推广这一技术。虽然很多知名的DSL 是为了商业上的开发和文护,但是一些企业已经使用这项技术来创造一种语言,但还是小部分人,可能是DSL 门槛较高吧。这个小组必须设计语言,建立解析器和其他可能的工具来支持这个程序,以及培养一个新加入者如何用 DSL。 Java演进英文文献和中文翻译(2):http://www.youerw.com/fanyi/lunwen_34731.html