在不改变语言的前提下如何推进Java的不断演进 - 编程入门网
是另一种 DSL,称之为内部DSL。他说内部DSL是直接在宿主语言中开发出来的。这对于Lisp和 Smalltalk开发者来 说很容易理解,而最近Ruby社区也开始对内部DSL情有独钟了。
在不改变语言的前提下如何推进Java的不断演进(2)时间:2011-08-05 infoq 译:张龙虽然很多知名的DSL都是由商业公司开发和维护的,但一些企业开发团队也已经使用该技术来创建能够 快速解决其问题的语言了,但毕竟还是小众,这可能是 DSL领域门槛比较高的缘故吧。负责DSL的团队必 须要设计语言、构建解析器和其他工具来支持开发团队,还要对每个新员工进行培训,让其了解DSL的工 作机理。这时,涌现出了能够支援DSL开发的工具,这极大地改变了当前的状况。Intentional Software 所开发的Intentional Domain Workbench比Java还要久远,它首度实现了该工具的功能。该项目创建于微 软研究院,Charles Simonyi博士在1995年所发表的论文“The Death of Computer Languages, the Birth of Intentional Programming”描 绘了其愿景。2002年,Simonyi创建了Intentional Software以 继续实现其想法,大家可以看看介绍该系统的视频,极具震撼力。目前该产品的版本是1.0,但只有极少 数的合作者能够访问。 其他一些软件公司也在研究这个概念,其中就包括以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),这是闭包的一个关键技术: 除了Single Abstract Method所需的参数外,方法体还可以通过@As.Additional注解声明额外的参数 。在获得SAM类型的实例时,这些参数可以带有绑定值,然后 在每次调用时传递给方法。 Chapman还创建了Rapt项目以探索该技术的其他使用场景,同时为语言的两个变化提供了自己的实现— —多行字符串(Multiline Strings)与XML字面值(XML literals)——这两个特性是 为JDK 7准备的, 但却不会包含到最终的发布中。Java甚至也可以使用这种方法实现闭包,Chapman对此说到: 我们刚刚使用该技术完成了一个Swing项目,在这个过程中发现了泛型的一些小bug,其中一个bug还没 有修复,除此之外一切都很棒,没人再想使用传统 的匿名内部类了 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |