在不改变语言的前提下如何推进Java的不断演进 - 编程入门网
在不改变语言的前提下如何推进Java的不断演进时间:2011-08-05 infoq 译:张龙James Gosling在“The Feel of Java”中说到: Java是一种蓝领语言,它并非博士的论文素材而是用于完成工作的语言。各式各样的程序员都非常熟 悉Java,因为在设计Java之初我就坚持这样一种观点:选择久经考验的东西而非仅仅是听起来很美。 Java所获得的巨大成功证明了这种设计方式是正确的,但如果这依然是当今Java的重要目标的话,那 么其结果就是语言的演进将变得非常缓慢。除此以外,Java是一门成熟、使用广泛的语言这个事实也将导 致其演进过程充满了困难。一方面,添加到语言中的每个特性都可能在一定程度上造成不可预料的结果, 这么做会疏远那些已经使用了该语言的开发者。另一方面,本身很完美的特性可能在同语言中的其他特性 进行交互时产生不可预料的结果。更糟的是,一旦增加了某个语言特性,几乎就不可能再将其移除了,即 便是该特性会对整个语言产生不利影响也没办法。为了证明某个新特性是正确的,语言设计者必须确信从 长远来看,该特性会给语言带来好处,而不是短期效益或是针对某个问题的快速解决方案,之后就变得可 有可无了。为了降低风险,语言设计者通常都会创建单独的一种语言或是分支来进行试验,比如Pizza语 言就是在实现前用来测试Java泛型的。这种方式的问题在于试验的参与者非常小众并且都是自己想参与进 来的;显然他们对语言特性很感兴趣,很多人都是学者或研究员。但是,在普通的程序员开始使用这些特 性时,那些学者或是研究员认为很棒的特性可能会变得很糟。 为了直观感受一下这种情况,请考虑关于Java 7闭包特性的激烈争论。一段时间以来,有人在提案中 给出了闭包的实现,但最终却还是没有达成共识。随后,Sun决定不打算在JDK 7中添加完整的闭包支持。 这时争论的焦点转向为Java是否变得越来越复杂了,在Java 5中添加泛型(尤其是通配符语法)时就已经 出现了这种争论;在Java已经通过匿名内部类部分实现该功能的情况下,完整的闭包支持是否是正确的呢 。需要完整闭包支持的两个重要场景是简化fork/join API(添加到了JDK 7中以改进多核编程)的使用以 及辅助资源的清理。Josh Bloch的ARM block提案(期望通过Project Coin加入到JDK 7中)就第二个问题 给出了另一种解决方案。Cliff Click博士在面向Java的可扩展、非阻塞编程风格的研究中给出了关于 fork/join的另一种方案,随着处理器核心数的不断增 加,这种方案看起来更合理。如果这一切都成为可 能的话,那么Java中使用闭包的地方将变得非常少了,语言根本没必要提供这个特性。 话虽如此,但对于编程语言来说,持续不断地平稳发展还是非常重要的。因此本文探究了如下3种技术 以向Java中增加新的语言特性而又不改变语言本身,他们 是客户化领域特定语言(DSL)、Java 6的注解 处理器(通过库来增加可选的语言特性)以及将语法糖从语言迁移到IDE中。每项技术都可以让众多的主 流开发者以非侵入的方式体验这些新特性,最棒的想法则可以融入到语言核心当中。 客户化DSL 在这3项技术中,人们谈论最多的还是DSL。该术语的确切含义至今尚未统一,但出于讨论的目的,我 们在这里简单地把它看作是用于解决特定问题、应用范围很窄 的一种语言而非用于解决所有计算问题的 通用语言。这样,DSL就并非是图灵完备(non-Turing complete)的。当然了,还是会有一些边际情况存 在的,比如说Postscript是一种图灵完备的语言, 但根据我们方才的定义,它也是一种DSL。 如上所述,DSL并非新概念。其他类似的DSL还有正则表达式、XSLT、Ant以及JSP等等,所有这些都需 要某种客户化的解析器对其进行处理。Martin Fowler还说fluent interfaces/API也可以看作 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |