全球旧事资料 分类
f中文译文
不改变语言的前提下推进Java演进
JamesGosli
g在“TheFeelofJava”中说过Java是一种蓝领语言它并不是博士的论文材料而是可以完成工作上的语言。很多不同的程序员都非常熟悉Java因为我有一种趋势去选择普及的东西这是一个不错的选择。
Java的这种成功证明了它的这种方法是正确的如果Java今天仍然以这个为目标那么它的语言演进将变得很缓慢。Java作为一个成熟使用广泛的语言也将导致其演进过程充满了困难。一方面每个特性添加到语言中都有可能造成不可预知到后果这么做会疏远那些熟悉Java的人另一方面本身很完美的特性可能在与其他特性进行交互时产生未知的影响。更糟的是一旦增加了某个语言特性几乎就不可能再将它移除即使这个特性会对整个语言产生危害也没办法。语言设计者为了证明某个特性是正确的应该从长远的角度来考虑不应该在短期内解决这个问题而之后就变成了多余的。为了降低风险语言设计者一般会创建单独的一种语言或者分支来进行试验比如Pizza语言就是在完成前用来测试Java泛型的。这种方式的问题在于试验的参与者是比较少的人群并且是自愿的。他们对语言特性很感兴趣很多人是学者或者研究员。但是在普通的程序员使用这些特性时那些学者或是研究员认为很好的特性可能变得很糟。
为了感受一下这种情况请考虑Java7闭包特性的激烈争论。很长时间以来有人在提案中给出了闭包的实现但最终却还是没有达成共识。然后Su
公司不在JDK7中添加完整的闭包支持。争论的焦点转向为添加泛型会不会导致Java变得越来越复杂在Java中已经通过匿名内部类部分实现该功能的情况下完整闭包还是正确的吗。需要完整闭包支持的是简化forkjoi
API添加到了JDK7中以改进多核编程的使用以及清理资源。JoshBloch的ARMblock提案对第二个问题给出了另一种解决方案。CliffClick博士在面向Java的可扩展非阻塞变成风格的研究中给出了关于forkjoi
的另一种方案这种方案随着核心处理器的不断增加看起来也很合理如果这种成为可能的话那么Java中使用闭包的地方将会很少了语言就不需要提供这个特性了。
虽然这样但是对编程语言来说。不断的平稳发展还是非常重要的。因此下面讲了3种技术向Java中增加新的语言特性而又不改变语言本身他们是客户化领域特定语言DSL、Java6的注解处理器用库来添加可选择的语言特性以及将语法糖从语言般向IDE。每个技术都能让主流开发者用非侵入方式体验这些新特性好的想法可以融合到语言
f核心当中。
客户化DSL
在这3个技术中讨论最多的还是特定领域语言或者说是DSL。关r
好听全球资料 返回顶部