在不改变语言的前提下如何推进Java的不断演进
2010-03-22 00:00:00 来源:WEB开发网要生成源代码而不是字节码,注意生成代码的格式(尤其是缩进)。编译器不在乎生成的代码是不是都在同一行,但用户在乎。我甚至还使用注解处理器在恰当的地方增加了一些注释和javadoc。
如果这项技术逐渐流行起来,用户将可以通过IDE查看编译期所生成的代码。
IDE中的语法糖
Bruce Chapman还提到了第三项技术——将语法糖从语言迁移到IDE中——他在博客中对该问题做过深入阐述。对于Java IDE来说,生成部分样板代码已成为不可或缺的功能了,比如类的getters和setters,但IDE开发者刚刚开始深挖该这个概念。 JetBrains的IntelliJ 9为内部类提供了一个类似于闭包的简洁的代码块语法,开 发者也可以自己加。就像代码折叠一样,该语法会扩展到编译器能够处理的完整的匿名内部类——这样坚持使用标准的匿名内部类语法的开发者很容易就适应了。 Eclipse也有一个类似的插件。关键在于这种语法仅仅是实际代码的另一种展示方式而已,编译器和任何源代码管理工具都能够像以前那样处 理他们。开发者可以在两种方式间自由切换(就像代码的展开与收起一样),无权访问该语法糖定义的人仅仅会看到正常的Java代码。Chapman说到:
要想实现易于使用的目标还有很多工作要做,但从长远来看,我发现开发者会很轻松地实现加糖/脱糖(sugaring/desugaring)的转换(可以 参考jackpot来 了解实现原理)、不断尝试、不断演进并与同事和社区分享好的点子。这么做的好处与语言的演进别无二致。最好的东西会流行起来并形成实际语言演进的基础,如 果必要的话还可以随时去除该方法无法实现的“噪音”。
由于语法糖还要兼顾(非常多)其他的语言特性,因此无法提供完整的闭包支持;比如说BGGA闭包就有一些特性无法匹配匿名内部类,因此不能通过这种方式实现。话虽如此,这种想 法却展示了通过各种新语法来表示匿名内部类的可行性,类似于BGGA语法或是FCM语法,开发者也可以选择自己喜欢的语法。其他的语言特性(如null-safe Elvis operator)可以通过这种方式实现。要想进一步验证该想法,可以体验一下这个NetBeans module(由Chapman开发),这正是他所说的用于 Properties的原型。
结论
在语言的发展过程中总是需要考虑稳定与发展之间的平衡。上面介绍的技术所带来的好处是他们不会影响平台或是语言本身。这么做允许我们犯错误,也有益于进行快速激进的试验。由于开发者能够自由地进行试验,我们看到越来越多的人开始解决常见的样板代码“噪音”问题,如匿名内部类语法等,同时将这些想法以合理的方式组织起来以获得最大的价值。我们将欣喜地看到开发者使用这些方法将Java平台推向新的远方。
更多精彩
赞助商链接