写点什么

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

  • 2008-01-17
  • 本文字数:2323 字

    阅读完需:约 8 分钟

最近,关于 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?

2008-01-17 20:131204
用户头像

发布了 47 篇内容, 共 13.0 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试岗位的经典面试题

老张

软件测试 面试题 职场成长 面试求职

热仿真 散热仿真分析公司-CAE软件服务代做外包

极客天地

Arbitrum STIP 陷尴尬局面:8500 万美元支出仅换回 1500 万美元收入

TechubNews

《 黑神话 · 悟空》视觉震撼背后的技术力量:如何用云桌面加速 CG 视觉创作 !

Finovy Cloud

游戏开发 游戏 黑神话悟空 黑神话

无人驾驶,并非无人之地

自象限

人工智能 自动驾驶 AI

哈银消费金融:深耕消保与风控 稳健展现发展潜力

极客天地

Percona Toolkit 神器全攻略(开发类)

GreatSQL

豆包模型能力大幅提升,中国版Vision Pro正式发布!今年大模型市场份额第一还会是百度吗?|AI日报

可信AI进展

人工智能

生成式AI已融入你的生活和工作了吗?

天津汇柏科技有限公司

人工智能 生成式AI 生成式 AI 应用

元宇宙虚拟展厅是如何制作、配置和维护的?

3DCAT实时渲染

云展厅 元宇宙开发 元宇宙解决方案 元宇宙线上虚拟展厅

中移动集团SRE人员能力提升培训圆满结课

雅菲奥朗

DevOps 运维 SRE SRE培训 SRE认证

公司最大的内卷,偷偷做单元测试

禅道项目管理

项目管理 程序员 软件测试 单元测试 测试人员

这是一款轻量存储黑科技!

天翼云开发者社区

云计算 天翼云 轻量存储

中国电信公布2024年中期业绩!

天翼云开发者社区

云计算 中国电信

2024即刻职达人才生态合作大会于珠海横琴成功召开,共话数智时代人力资源新趋势

新消费日报

GitHub星标破万!Python学习教程(超详细),真的太强了!

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言 学习教程

稳健前行,合规筑基:哈银消费金融在变革中引领稳健增长新篇章

极客天地

聚伙伴,创价值,享未来——2024年锐科信息赋能伙伴加速智能化沙龙活动圆满举行

叶落便知秋

聊聊 PHP 多进程模式下的孤儿进程和僵尸进程

不在线第一只蜗牛

SQLAlchemy 在 Python 中的同步与异步操作及CRUD实现指南

代码忍者

高性能桌面管理系统助力实现国产化生态!

上海锐起科技

火山引擎VeDI实验平台助推企业量化决策能力升级

字节跳动数据平台

大数据 A/B 测试 对比实验 数字化增长

SDN网络技术在云计算中的应用

天翼云开发者社区

SDN网络

行业智能化的“火车头效应”,由星河AI金融网络启动

脑极体

AI 网络 通信

PPT时间轴怎么画?用这款AI工具自动生成,告别手绘!

职场工具箱

职场 PPT 绘图工具 时间轴制作软件 AI生成PPT

如何提高研发效能?思码逸 & 信通院告诉你

思码逸研发效能

团队管理 DevOps #研发效能

争论:Java是否应该停止增加新特性_Java_Ryan Slobojan_InfoQ精选文章