Java是否应该停止增加新特性
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:最近,关于Java平台的未来有许多辩论,Bruce Eckel认为应该彻底停止往Java中增加新特性,这引起了一场新的辩论。他说如果Java要保持主流地位,那么就需要停止进化。那么,您同意他的观点吗?
如果由于向后不兼容而不能正确的插入特性,我们在语言变化的时候会受到很大束缚,Java现在的情形与C++相同。C++经常因 为它的设计受到批评,从C++标准委员会刚开始运转我就在其中工作,已经工作了8年,我看到了所有关于语言特性的辩论。这些语言特性不是变化无常的,而是经过非常谨慎的而且深思熟虑的考量的结果。是向后兼容C语言产生了语言复杂性和困难性。一旦你在所有事情上都把自己与向后兼容绑定在一起,那么当你向语言 加入特性的时候必须做好语言被破坏的准备。如果Java不愿意打破向后兼容性,那么它就无法避免不打粮食的复杂性以及不完整的新特性实现。
Eckel认为新的语言是放置主要新特性的正确场所,Scala是“当前Java最好的退出策略”。他还认为Java唯一的出路是成为象C那样的工具语言,将来只应该清理并丰富现在不完整的库,把主要的语言变化(例如闭包)留给其他语言,而不是加入Java中。
Kevin Dangoor同意Eckel的观点,他说在需要向后兼容性的语言中加入新的特性也是笨拙的,他还指出在这一领域ECMAScript与Java有同样的问题。Dangoor还对于开发者始终要寻求新的、炫的特性来帮助项目的批判声音提出了质疑:
软件是思考的成果。其可锻性很强且新的思想很容易测试。通过互联网,新的思想和代码传播的很快很远,这是好事情。对于我来说,现在开发软件比5、10、15、20年前要好的多。我看到许多闪光的事物飞过,而没有真正的使用过它们。但是我认为这些闪光的事物是非常重要的,其中包含了各种各样的思想,可以使用不同的工具将其应用于不同的场景。一些出自这些思想的实现成为了主流。
一般来说,人们不会转而使用所有从其身边飞过的闪光的事物。有些人会认真的尝试这些事物,他们可能会成为成功的拓荒者或者遭受失败的痛苦而转向其他解决方案。如果有足够的人喜欢该思想并且推动它的发展,那么该思想会成为主流。Rails是2004年闪光的新事物。毫无疑问,有一些早期的使用者遭受了痛苦,但是在那些岁月里,相对于使用其他工具的 人而言,更多的人因为使用Rails获得了非常高的生产率。不管最终有多少人接受了Rails,事实是自Rails出现以后,它的很多思想对工作产生了显 著的影响。
Cay Horstmann 同样认为应该减少对Java语法的关注,增加对Java中痛苦之处的关注。Horstmann援引了C++,指出Java解决了C++碰到的两个主要痛苦之处,内存管理和GUI/数据库的访问。
然而,Java现在需要解决它自己的痛苦之处:
◆臃肿的代码
getter和setter方法,匿名类形式的事件监听器,可以由编译器推断出来的长的类型声明。
◆Web应用开发
这很难,用复杂的而且动力不足的技术,例如JSP和JSF来开发web应用“就像用叉子来喝汤”。
◆并发
“我不够聪明,不能满怀信心的说我编写的重要并发程序不会有死锁,不会有竞争条件。这就象我不够聪明,不能满怀信心的说我编写的重要C++程序不会有内存泄露或内存破坏”。
其他观点:
◆Phillip Calçado认为Java应该固定而不是继续扩展,但是不同意关于Java本身难以阅读的说法,他说在创建Java的时候,它比当时的语言,例如C++易于阅读。
◆Richard Relos认为 大多数Java代码不使用新的语言特性,增加新的特性仅仅分散了开发者的注意力,破坏了逻辑形式。
◆Ian Cooper探讨了C#的问题,他质疑C#是否已经到达了收益递减的点,他同意主要新特性的去处应该是一个新语言。
◆Giovani Salvador担心如果Java不再增加新特性,它会过时,那么Java开发者会变成“恐龙”。
你如何看待这个问题?
来源:InfoQ中文站 作者:曹云飞 责编:豆豆技术应用