写点什么

争论: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:13846
用户头像

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

关注

评论

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

Mac电脑版MarkDown写作推荐 iA Writer 激活中文最新版

胖墩儿不胖y

markdown Mac软件 Markdown 编辑器 写作软件

如何在不同服务器之间来进行安全又极速的大量数据同步?

镭速

FTP加速小技巧 | 这个工具居然能百倍加速FTP?

镭速

ftp ftp传输 ftp加速

美国2009年开始入侵华为总部服务器;马斯克脑机公司将进行首次人体试验;全球首个5G卫星电话拨通丨RTE开发者日报 Vol.54

声网

GitHub上标星23K+的Redis进阶笔记(应用+原理+集群+拓展+源码)

小小怪下士

Java redis 程序员 java面试

软件物料清单管理平台,让开源组件安全问题无所遁形

网安云

异常检测:探索数据深层次背后的奥秘《上篇》

汀丶人工智能

数据挖掘 机器学习 异常检测

华为云CodeArts Check代码检查服务用户声音反馈集锦(7)

华为云PaaS服务小智

云计算 软件开发 华为云 代码检查

GLTF编辑器:在线模型材质编辑工具

3D建模设计

纹理处理 GLTF 材质修改

行于“云”上,“翼”路顺畅!

天翼云开发者社区

云计算 云服务

智能合约跟单系统开发,一键自动跟单平台模式搭建

V\TG【ch3nguang】

GLTF编辑器的另一个作用:格式转换

3D建模设计

格式转换 GLTF glb

视频转码工具 Compressor激活中文最新版

mac大玩家j

Mac软件 视频处理工具 视频编辑软件 编辑视频

成功入选 2023 谷歌出海创业加速器,Tapdata 乘势远航

tapdata

数据采集 数据集成 Tapdata

TDengine 用户案例合集 | 智能环保项目的时序数据处理难点与优化实践

TDengine

时序数据库 #TDengine

基于Java开发的数字化询价招标采购系统(SRM系统源码)

金陵老街

spring-boot

如何使用ChatGPT构建一个Web应用程序?

互联网工科生

应用程序 ChatGPT AI编程

国泰君安期货新一代国产业务系统上线 首次使用国产分布式数据库TDSQL

Geek_2d6073

五项大奖、三项评估!为行业数字化转型发展注智赋能!

天翼云开发者社区

云计算 云服务

企业微信针对百万级组织架构的客户端性能优化实践

JackJiang

网络编程 即时通讯 IM

百度智能云千帆大模型平台 2.0 产品技术解析

Baidu AICLOUD

异构计算 百度百舸 千帆大模型平台

百度APP iOS端包体积50M优化实践(六)无用方法清理

百度Geek说

ios 百度app 企业号9月PK榜

软件定义汽车时代,1 亿行代码的安全保障,极狐GitLab 这么做!

极狐GitLab

gitlab 安全 DevSecOps 汽车 安全左移

OmniFocus 3 for Mac(GTD时间管理工具) v3.15中文激活版

mac

任务管理软件 苹果mac Windows软件 OmniFocus Standard

基于Java开发的neo4j知识图谱、elasticsearch全文检索的数字知识库

金陵老街

区块链系统开发应用解决方案|去中心化应用dapp模式搭建

V\TG【ch3nguang】

REST API设计原则:构建可扩展、易维护的 API

高端章鱼哥

RESTful API REST API

Java基础面试题 【二】JUC

派大星

Java 面试题

人工智能在云计算中能发挥什么作用?

Finovy Cloud

什么是模型混合模式?

3D建模设计

3D模型 gltf编辑器

私有云的优缺点是什么?与公有云的区别

青椒云云电脑

云桌面

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