`
zhouxing
  • 浏览: 206434 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java是否应该停止增加新特性

阅读更多

争论:Java是否应该停止增加新特性

作者 Ryan Slobojan译者 曹云飞 发布于 2008年1月17日 下午8时13分

社区
Java
主题
语言,
社区,
变更

最近,关于Java平台的未来有许多辩论,有些人认为Java应该加入更多的特征,这样才能与C#、Ruby这样的语言竞争,另一些人认为应该保持Java的稳定,以免变的过于复杂以至于难以使用。Bruce Eckel认为应该彻底停止往Java中增加新特性,这引起了一场新的辩论。

在Bruce Eckel 的博文中,他说如果Java要保持主流地位,那么就需要停止进化。作为一种语言,Java已经“过于嘈杂”了,代码有些过分啰嗦(例如System.out.println())。Eckel认为Java泛型增加了复杂性,这已经引起了人们的关注,他还说明了他看到的Java的一个关键问题:

我们对于复杂性的唯一控制手段是抽象:隐藏不需要暴露的部分(分治法("divide and conquer")是一个变种)。在Java中的悖论是,复杂性问题的一个关键方面被忽略了:没有认识到代码可读性是重要的问题。好像IDE会为你写代 码,如果那样的话即使代码过分复杂也不是问题了。

[Joshua Bloch] 将关于复杂性的思想提升了一步。他说复杂 性不仅仅是指一个孤立的特定特征的复杂性,这种情况下复杂性通常是一目了然的。复杂性是指组合复杂性,这是当你将一个新特性与其他语言特性以任意可能的方式进行组合时所带来的复杂性。如果你没有从一开始就小心的设计,那么当你将一个新特性加入一种现存的语言中时,你无法控制该特性是怎样与其他现存特性进行 组合的。组合复杂性会产生恐怖的后果,特别是在加入了特性之后,这时再做任何事情都为时已晚。早餐结束后Josh说这类复杂性为Java的答疑解惑者提供 了丰富的素材,但是对于整个Java社区是有害的。

Eckel认为他自己是一个“特性上瘾者”,总是思考语言在新特性方面的进化,但是现在他质疑如果一个特性不能被正确的实现,该特性是否应该被去掉 (例如Java的泛型)。Eckel认为C和C++都非常稳定,Java也应该稳定而不是追逐新的语言特性或者试图跟随所有的市场冲动。有些人提出了打破 向后兼容性的想法,他们认为那些希望使用老特性的人们可以使用老版本的Java而不要升级到新版本。Eckel对于不惜一切代价维护向后兼容性的风险做了 警告:

如果由于向后不兼容而不能正确的插入特性,我们在语言变化的时候会受到很大束缚,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开发者会变成“恐龙”

你如何看待这个问题?

查看英文原文:Debate: Should the Java language stop adding new features?

分享到:
评论

相关推荐

    java1[1].6.0下载

    - **增强的安全性**:增加了新的安全特性,如更强的加密算法和安全策略改进,增强了网络应用的安全性。 - **数据库连接池**:JDBC 4.0引入了自动发现和连接池功能,简化了数据库连接管理。 - **NIO 2.0**:引入了...

    MSJVM 虚拟机 JAVA工具

    5. **应用程序兼容性**:在安装MSJVM后,需要测试运行的Java程序是否兼容,因为某些应用可能需要更新的Java版本或特定的JVM特性。 6. **许可证问题**:微软和Sun Microsystems之间的法律争端导致MSJVM的分发受到...

    Servlet3.0 新特性

    Servlet3.0是Java Servlet API的一个重要版本更新,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。以下将详细讲解Servlet3.0的关键特性。 1. **注解驱动的配置**: 在Servlet3.0之前,...

    Java 8 之 Windows XP下的安装

    Java 8是Oracle公司发布的一个重要版本,引入了许多新的特性和改进,对于开发者来说,它极大地提升了编程效率和代码质量。在Windows XP操作系统上安装Java 8可能与更新的操作系统有所不同,因为XP已经不再受到官方...

    Java 10的10个新特性总结

    Java 10是Java开发的重要里程碑,...对于开发者来说,了解和掌握这些新特性是跟上Java发展趋势的关键,以便更好地适应不断变化的技术环境。随着Java版本的快速更新,及时学习和应用新特性将成为保持竞争力的必要条件。

    2018JAVA经典就业面试大纲

    【2018JAVA经典就业面试大纲】 ...以上是根据2018年Java经典就业面试大纲整理的知识点,对于求职者来说,掌握这些内容将大大增加面试成功的可能性。当然,随着技术的更新迭代,不断学习和适应新技术也是必要的。

    java程序设计课件

    这个"java程序设计课件"包含了丰富的学习资料,旨在帮助初学者扎实掌握Java编程的基础概念和高级特性。 首先,我们来谈谈Java的核心概念。Java是一种面向对象的编程语言,它的核心理念是"Write Once, Run Anywhere...

    基于java视频播放器

    - **模块化设计**:为了增加新功能或更换播放引擎,项目可能采用了模块化设计,使得各部分代码解耦并易于维护和扩展。 通过以上分析,我们可以看出,这个基于Java的视频播放器项目涵盖了Java GUI编程、多媒体处理...

    javaservice工具源码

    JavaService工具是一个用于将Java应用程序转化为Windows服务的实用工具,其源码主要用C++编写,适应于Visual C++ 6.0环境。这个工具使得Java应用程序能够在Windows系统下像其他系统服务一样启动、管理和运行,即使在...

    JAVA 版MPEG播放器(Java音乐播放器)

    2. **Java GUI设计**:使用Swing或JavaFX创建用户界面,包括播放、暂停、停止、音量控制等按钮,以及进度条和音视频信息显示区域。 3. **MPEG解码**:通过JMF或JavaFX的内置功能,解析MPEG文件,提取音频和视频流...

    JavaService

    3. 可能增加了一些新的API,使开发者更容易集成和控制服务。 4. 可能优化了日志系统,提供了更详细的调试信息。 5. 可能修复了一些已知的bug,提高了兼容性。 总之,JavaService是一个强大的工具,它使得Java开发者...

    java8 oracle官网最新版本windows版本,

    安装完成后,开发者可以利用Java 8的新特性进行开发,提高代码质量和效率。不过需要注意的是,随着时间的推移,Oracle官方可能会停止对旧版本的更新和支持,因此,及时更新到最新版本以获取安全修复和性能优化是必要...

    java 3d 从官网上下的哦

    不过需要注意的是,Java 3D项目在2012年停止了官方更新,对于最新硬件和操作系统的支持可能有限,开发者需要评估其是否满足当前项目需求。尽管如此,许多开源社区仍然在维护和使用这个库,因此仍有可能找到解决方案...

    音乐播放器(java版新)

    Java是一种广泛应用于跨平台应用开发的高级编程语言,以其“一次编写,到处运行”的特性而著名,使得这款音乐播放器能够适应多种操作系统环境,如Windows、Linux和Mac OS。 在Java播放器的设计中,核心概念是使用...

    Java小游戏之数字彩虹雨.zip

    4. **随机数生成**:为了模拟随机下落的数字,开发者会使用`java.util.Random`类来生成一系列随机的数字,这些数字将在屏幕上以不同的速度和位置出现,增加游戏的视觉效果。 5. **定时器与事件监听**:Java提供了...

    java-mp3.zip_Java 播放器_java mp3_java 播放mp3_mp3 java_mp3 java

    Java 播放器开发是将 Java 语言与多媒体处理技术相结合的一种应用。在这个名为"java-mp3.zip"的压缩包中,包含了...开发者可以在此基础上扩展功能,比如增加音效调整、播放列表编辑、元数据显示等特性,提升用户体验。

    J2SE 5.0- Java安全及网络计算的最新技术

    标题与描述中的“J2SE 5.0- Java安全及网络计算的最新技术”强调了Java标准版(J2SE)在版本5.0中引入的安全性和网络功能的增强。...然而,这一领域的进步从未停止,Java平台持续演进,不断适应新的挑战和机遇。

    Java hotswap demo

    Java HotSwap是Java Development Kit (JDK)中的一个特性,通常与Java Debug Interface (JDI)一起使用。 IBM DeveloperWorks上的一篇文章《Java hotswap:类的动态更新》...

    java applet

    当用户访问包含Java Applet的网页时,浏览器会检测是否安装了Java运行环境。如果安装了,浏览器会下载applet的.class文件,并使用Java Virtual Machine (JVM)来解析和执行代码。这个过程涉及到AppletLoader、...

    简单音乐播放器java语言

    在编程领域,Java是一种广泛应用的高级编程语言,以其“一次编写,到处运行”的特性闻名。在这个项目中,我们利用Java来开发一个简单的音乐播放器,这涉及到Java的文件I/O操作、多线程以及音频处理等核心概念。 ...

Global site tag (gtag.js) - Google Analytics