在不改变语言的前提下如何推进Java的不断演进
2010-03-22 00:00:00 来源:WEB开发网其他一些软件公司也在研究这个概念,其中就包括以IntelliJ IDEA Java IDE而扬名天下的JetBrains,JetBrains最近发布了Meta Programming System(MPS)1.0版。MPS并没有使用解析器而是直接使用了Abstract Syntax Tree(AST)。它提供了一个类似于文本的投影编辑器(projectional editor)以便程序员能够操纵AST,同时该编辑器也可用于编写语言和程序。当程序员使用投影时就会为树上的每个节点创建一个文本投影,这样变换就会反映到节点当中。开发者可以通过这种方式以任意组合(通常称之为语言组合)扩展和嵌入语言。JetBrains正在内部使用该产品,最近发布的bug追踪产品YouTrack就是使用该系统开发的。
Java 6注解处理器
相对于Ruby、Smalltalk和Lisp来说,DSL在很多主流语言(如Java)中的流行程度就稍逊一筹了,但最近Java语言的一些变化(尤其 是Java 6中新增的注解处理器)为开发者提供了新的机遇以在其中使用DSL。对于Java EE 6中的JPA 2.0来说,其某些API本身就是 DSL。注解处理器会为应用中的每个持久化类建立一个元模型类型(metamodel type)。虽然开发者可以手工处理Java中的元模型,但这实在太无聊而且极易出错。注解处理器的出现改变了这一切,因为它内建于Java 6,因此无需特殊的IDE支持——IDE会代理编译器所触发的注解处理器,之后会自动生成元数据模型。
程序库也可以通过注解处理器来提供新的语言特性。比如说,Bruce Chapman的原型“no closures”提案就凭借该技术将方法转换为 Single Abstract Method(SAM)类型,然后在Java 6上编译。在与其交谈过程中,Chapman指出SAM类型还支持自由变量(free variable),这是闭包的一个关键技术:
更多精彩
赞助商链接