Java:进化的尽头

  [color=red]原文地址[/color]:[url]http://blog.youkuaiyun.com/beckel/archive/2008/05/27/2488305.aspx[/url]

Java: Evolutionary Dead End
January 3, 2008


  我在比利时安特卫普举办的Javapolis大会上刚做完一个主题演讲。现在是周五早上,前一天Josh Bloch作了发言,谈到了在closures(闭包)建议方面的争论。现在他就坐在我的对面吃早餐,我们更进一步谈论了这个话题。
当初我开始抱怨的时候,理由就很简单:Java作为一种语言过于繁杂(noisy)了。读代码要比写代码费劲得多,凭这一点就直接增加了软件开发的实际成本。计算机的时钟周期是一类非常稀缺的资源,凡是毫无效益地耗光这些资源的东西—即使是表面看无伤大雅的一句多余的System.out.println()—都会剥夺可能有重要用途的循环周期,并降低编程语言的效率([url=http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html]Steve Yegge在最近的文章中谈到了这个问题[/url])。

  Josh在演讲中提到向Java generics添加最后一个通配符可能会极大增加语言复杂性。Neal Gafter则建议应该具体化generics。而这两个人最开始都是Java generics的绝对支持者,他们对于我的批评文章的反应就说明了这一点。现在似乎出现了变化,我注意到一些人开始提出“generics确实很不错,但是…”(虽然最近Tim Bray称这些人是个[url=http://www.tbray.org/ongoing/When/200x/2007/12/16/On-Closures]祸害[/url])。

  我们对于复杂度唯一能够掌控的是抽象:隐藏无关紧要的部分(“分而治之”就是一种变化)。Java的自身矛盾性就在于它忽略了复杂性问题的一个关键方面,就是代码的可读性没有被看作为一个重要问题。似乎如果是IDE为你写的代码,那么这些代码即使是再复杂(本来不必这么复杂)也没关系。

  Josh进一步阐述了他关于复杂性的观点。他说,这并不是某一孤立的特性才具有的复杂性,因为这经常是直观可见的。这是一个将一个新特性以各种可能的方式与语言其它特性结合而形成的合成复杂性。当你将一个特性硬塞进已有的语言而不是从头开始认真仔细地进行设计时,你就不可能控制这种特性是如何与其他已有特性相融合的了。合成复杂性可以导致令人吃惊的问题,特别是在增加了特性后且做什么都于事无补的时候。吃早餐时Josh说这种复杂性会为Java困惑者们提供丰富的参考依据,令他们兴趣盎然,可是对于整个社区来说却没有一丁点好处。


[b][size=medium][color=blue]稳定性 VS 特性嗜好者[/color][/size][/b]

  我从与Josh共进早餐中领悟到的是我是一名特性嗜好者(feature junkie)。特性是这样一类好玩的游戏:一旦你掌握了它们,它们就可以以令人着迷的方式来运用。所以我总是在思考在新特性方面语言的演化问题。你也许会发现你也是一名特性嗜好者。

  所以,当Java Generics一类的特性被糟糕地(我认为)加入到语言中时,我感到十分沮丧,我认为在增加特性时他们没有做该做的事。

  但在我看来,该做的事绝不是一点不增加新特性。而是如果你不能正确处理,那么该语言可能就会不再成长并变得更相对稳定些,直到放弃对每一种已有语言特性的追求。

  勿需证明,C最好的特性之一就是很多年以来它没有作任何改变。C++也十分稳固。所以这么说来让Java稳定下来也不见得是坏事。

  这并不是说类似generics和closures的特性就“不好”。完全相反,当将它们精心设计到一种语言中时,它们可以十分清晰且功能强大。然而回想当初,Java是有这样的机会的。Bill Joy在语言最初版本之前[url=http://www.artima.com/weblogs/viewpost.jsp?thread=173229]强烈要求加入closures和generics[/url]等内容,但没人理睬。

  很多年以来人们一直容忍着,然后突然间generics就必须要硬塞进语言之中。这显然和当年C#出现generics的情形极为相似。后者也是要在Java5中制造出几个其他特性。似乎增加这些特性的紧迫性不是来自于要使用Java解决现实问题,而是Sun在试图保持与微软的C#进行竞争的感觉。这或许并非是空穴来风,因为Java必须首先要以粗犷方式破茧而出的原因,是其认为存在一个必须要赢取的市场窗口。一个依仗市场推进力设计出来的程序设计语言最终要以白忙活一场而步入终结。


[b][size=medium][color=blue]兼容性的圣杯[/color][/size][/b]

  一种选择是正确地加入新特性并破坏向后兼容性。作为一个特性嗜好者我会选择这样做,因为它不会将降低语言的完整性。而该方法一直以来未被采纳是因为向后兼容性总是语言的利器之一。我注意到Python在早期版本中战战兢兢地小范围破坏了向后兼容性。这个变化实际上没有引发任何反对声音。结果是Python正计划扩大向后不兼容的范围。Ruby也在考虑去掉一些Perl特性以简化语言。那些不想拥抱这些变化的人不会进步,他们实际也是出于保守而不愿进步。很多公司出于这个原因仍旧一直使用Java1.1。他们也将不会受这场争论的影响,因为无论如何他们都没打算接受这些变化。

  我们如果由于向后不兼容而无法正确地加入新特性,当语言的变化到来时我们就无法施展拳脚了。我们处在的位置和C++一样。C++常常在设计方面饱受批评。而我作为标准委员会的成员的这八年里,经历了在每一个语言特性上的争论。这些特性并非是反复善变,而是谨小慎微和深思熟虑过的。导致语言最终变得复杂和困难的正是要保持对C的向后兼容性。一旦你打算与任何一样事物都保持向后兼容性,你就必须准备好因增加特性而破坏语言。如果Java不想破坏向后兼容性,那么它就不可避免要接受新特性所具有的毫无收益的复杂性以及无法完整实现等特点。我在《Thinking in Java(第四版)》中谈到过这个问题,Java Generics只是对真正generics的一个苍白的模仿,而对于closures更有价值的建议之一(我想它该叫做“CPA”,但在Javapolis大会的演讲中没听到过该词—也许有人会告诉我正确叫法)是对真正closures的不完整实现。但实际上有个完整实现会更好些,因为它会使代码更清晰、更简单易懂。

  基础级新特性应该在新的语言中有所体现,其作为语言整个体系的一部分来精雕细琢地进行设计,而不是事后才想起来添加进去。在我看来,Java当前最好的退出策略(exit strategy)是[url=http://www.scala-lang.org/]Scala[/url]。我甚至听到了一些顶尖的程序员说在这个问题上他们并不在乎Java发生了什么事,因为他们正打算转向[url=http://www.scala-lang.org/]Scala[/url]。

  如果Java要完整地存在下去,它就必须像C一样:成为一匹能靠得住的“驮马”。实际上,将来任何语言上的变化都必须能够使语言和其使用方法变得简单和清晰(比如修复classpath问题),并且充实丰富(比如说)那些被打入冷宫的不完整的库(像JMF)。

  然而,类似closures这样重要且基础级的语言特性虽然在理论上极其吸引人,但一旦将其强行加进在抽象清晰性上重视向后兼容的语言中时,就会在实践过程中付出巨大的成本。因此在这个问题上我们必须变得异常保守。

(我们会在即将到来的JavaPosse摘要中讨论这个以及其他Java方面的重要问题:[url]http://www.mindviewinc.com/Conferences/JavaPosseRoundup[/url])
进化算法代码Java版 对于想了解进化算法的有帮助,这个是2.0版,现在有更新版的。不过对于初学者来说,这个版本的足够用了。 立即下载

相关推荐

进化算法用JAVA语言实现

进化算法用JAVA语言实现,进化退火算法的实现及代码都包括在内,对算法的学习很有帮助。

Java 走到了尽头吗?

}不要与 JavaScript 或 Javanese 语言混淆。Java 是一种编程语言和平台,由加拿大计算机科学家James Gosling于 1995 年在Sun Microsystems创建。Java 是一种高级的、基于类的、面向对象的编程语言。它是一种通用编程语言,旨在程序员编写一次,随处运行,因此遵循WORA原则,这意味着一旦编译的 java 代码可以在其他平台上运行而无需重新编译。因此 Java 是平台独立语言,因为它使用虚拟机来执行其字节码为什么我说 Java 也是一个平台?...

yihanss的博客 457

JEAF:Java 进化算法框架

JAVA进化算法框架(JEAF)是工程研究综合组(GII)开发的JAVA库集合,其中包含可应用于进化计算研发的多种进化算法、实参基准函数和分析工具。 该框架被 GII 的研究人员大量使用,因此正在不断改进和扩展。 JEAF 的主要属性如下: 多平台: JEAF 是用 Java 实现的。 所需版本为 1.5 或更高版本。 模块化:设计完全面向对象,在不同组件之间保持最大可能的独立性。 灵活: JEAF 的设计不仅支持当前的进化算法,还支持给定用户可以想象的任何运算符组合。 这是通过将进化算法分成多个阶段并使用任意长度的算子链实现每个阶段来实现的。 此外,很多方面已经实现的常用算子也可以通过插件进行配置。 效率:进化算法很耗时,尤其是当它们应用于某些工程领域时,如果我们将 Java 与 C 或 C++ 进行比较,那么选择 Java 已经产生了负面影响。 因此,我们谨慎地做出了一些决定,

Java的进化之路走到了尽头

一百年后,人们使用什么语言开发软件?为什么这个问题值得思考?原因不是我们最终会见到这些语言,而是幸运的话,我们从现在开始就能提前注意这些语言!

魏小言的博客 344

Halcon频域滤波实战:5分钟搞定傅里叶变换与功率谱分析(附完整代码)

本文提供Halcon频域滤波的实战指南,重点讲解如何利用傅里叶变换与功率谱分析快速解决图像处理难题。通过核心算子fft_image和power_real,演示了从空间域转换到频域、分析功率谱以定位周期性噪声,并构造滤波器进行精准去除的完整流程,附有可直接运行的代码示例。

docker8compose的博客 216

逆向淘宝x-mini-wua:从加密算法到设备指纹的生成逻辑

本文深入剖析了淘宝风控核心参数x-mini-wua的生成逻辑与加密算法。通过逆向分析,揭示了其作为设备“身份证”的作用,详细拆解了从硬件信息采集、SG_INNER_DATA文件解密、关键参数提取到最终长wua合成的完整技术链条,并探讨了模拟生成与绕过风控的实战思路及注意事项。

year5的博客 1080

基于Java实现的遗传进化算法说明与使用

【代码】基于Java实现的遗传进化算法说明与使用。

毕业作品网站 868

YOLOv13改进策略【Neck篇】| GSConv 轻量卷积,Slim-Neck 减参数还不掉点

Neck 篇的第二篇继续"替换式"改进,这次的对象是 Neck 里的下采样卷积。GSConv 出自《Slim-neck by GSConv: a better design of lightweight detector》(2022),它的出发点:DWSConv(深度可分离)轻但"信息混不进通道",标准卷积重但表达好——GSConv 用GConv(分组卷积)混通道 + DWConv 补空间 + Channel Shuffle 打散,两全其美。

qq_53329130的博客 30

Java真的没出路了吗?

事实上,Java作为一种成熟、稳定的编程语言,已经在金融、电商、企业级应用等领域建立了广泛的应用基础。所以,Java与其他编程语言的竞争并不是零和博弈,而是各自在不同领域发挥自己的优势。Java作为一种成熟、稳定且广泛应用的编程语言,至今仍然拥有庞大的用户群体和广泛的应用场景。但如果你愿意深入学习,不断提升自己的技能水平,那么Java市场依然有你的位置。而且,随着技术的不断发展,Java也在不断推陈出新,适应市场需求。未来,随着数字化、智能化的发展,Java的应用场景还将进一步扩大。

xuebajiaoyu的博客 1444

【产品经理修炼之道】- 优惠券系统从入门到精通(二)

在电商平台中,优惠券的使用场景与频次都很高。那么如何做好一个优惠券系统呢?本文总结了相关流程和设计思路,希望对你有所帮助。上一篇与大家分享了架构中的前端应用、生命周期、优惠券管理中OpenAPI 、基础系统,今天继续与大家分享架构图中优惠券模板部分。

xiaoli8748的专栏 1292

hive get_json_object解析json结果为null咋办?

最近一位开发的同学在使用get_json_object函数对json数据解析的时候,出现了结果为null的问题,问题原因是sql语法导致的,那么今天就来详细介绍一下解析json函数的用法!最后还是提醒小伙伴们,在开发过程中,一定要注意sql语法格式的书写,避免一些意想不到的结果!

笑看风云路的博客 2308

《Java遗传算法编程》—— 1.4 进化计算的优势

本节书摘来异步社区《Java遗传算法编程》一书中的第1章,第1.4节,作者: 【英】Lee Jacobson(雅各布森) , 【美】Burak Kanber(坎贝尔),更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.4 进化计算的优势 智能机器在我们社会中的采用率正好确认了它们的有效性。我们用计算机来解决的绝大多数问题可以归结为相对简单的静态决...

weixin_34024034的博客 174

小米汽车车载多摄像头视频链路深度解析 | MAX96792/MAX96724/MAX96781 实战分享

通过合理的输入输出规划 + 虚拟通道管理 + 加串行策略,可以在成本和性能之间取得最佳平衡,这就是多摄像头系统设计的核心精髓。

weixin_43199439的博客 1552

Java:进化的尽头 by Bruce Eckel 以及Thinking in Java 5th edition 《On Java 8》

在读Java编程思想之前,上网搜了一下Bruce Eckel的信息,发现了这篇文章和Java编程思想(4th edition)的课后题,仅做参考吧,优快云上可下载。随后跟踪到了Bruce Eckel的个人博客页和Github页面。看到他今年6月写的一篇博客,发现Java编程思想的第五版已经发布了,叫《On Java 8》,只有电子版,在Google Play可购买,目前价格是45.6$,感觉有点

ananhao的博客 1万+

Coffin-Manson模型的详细讲解

Coffin-Manson模型是一个简单而强大的工具,用于预测低循环疲劳寿命,尤其在半导体功率循环中评估热机械可靠性。其核心是通过应变(或温度变化)与循环次数的对数关系,实现加速测试和寿命外推。尽管有局限性,通过改进版本(如加入激活能),它在电子封装、焊点疲劳和器件设计中仍广泛应用。实际使用时,建议结合实验数据拟合参数,并验证模型预测。如果需要特定材料的参数值、代码实现或进一步计算示例,请提供更多细节!

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 2153

C#使用OpenCvSharp+微信模型识别多个二维码

本文介绍了一个基于OpenCvSharp和微信开源二维码检测器的多二维码识别项目。该项目通过C# WinForm实现,主要功能包括:加载图片、识别图片中的多个二维码并显示识别结果。核心代码使用了OpenCvSharp.WeChatQRCode类,通过预训练的caffe模型(detect.prototxt/detect.caffemodel和sr.prototxt/sr.caffemodel)进行二维码检测和解码。识别结果包括每个二维码的编号、内容及位置信息。项目适用于批量二维码识别场景,部署简单,识别效果良

遇见--专栏 124

Java进化的尽头

转载需声明:原文链接网址:http://www.artima.com/weblogs/viewpost.jsp?thread=221903 Java: Evolutionary Dead End         我在比利时安特卫普举办的Javapolis大会上刚做完一个主题演讲。现在是周五早上,前一天Josh Bloch作了发言,谈到了在closures(闭包)建议方面的争论。现在他就坐在

青衫烟雨客的专栏 2088

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

其实,校招的尽头大多都是中小厂。

八股文是"入场券",项目深度是"护城河"。八股文能保证你不被一轮刷掉,但真正决定你面试高度的,是你对自己项目的理解有多深。面试是最好的"技术体检"。它能最快、最精准地暴露你知识体系中的漏洞,逼迫你去思考和复盘。自信来源于准备,也来源于实践。多说、多练,哪怕是结结巴巴的开始,也比沉默的焦虑要好一万倍。秋招之路,道阻且长,但行则将至。与所有在路上的同学共勉!春招上岸Java面试题需要拿来学习的小伙伴,直接查看下方名片!

IT_1024的博客 1571

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

测试开发:是测试的尽头,还是开发的捷径?

测试开发是测试职业的进阶方向而非终点,其核心是通过技术手段提升软件质量与效率,而非简单转向开发的跳板。从业者需平衡测试思维与开发能力,避免盲目追求技术而忽视质量本质。职业发展应聚焦实际需求,构建自动化工具与测试平台,同时重视软实力培养。测试开发的价值在于质量赋能,未来需在智能化趋势下持续学习,坚守质量初心,在技术迭代中建立专业壁垒。

2501_94480392的博客 36

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

一百年后,人们会使用编程语言?

很难预测一百年后的人类生活,只有少数几件事是可以确定的。那时,汽车将具备低空飞行能力,城市规划的法规将放宽,大楼可以造到几百层,大街上一天到晚看不见太阳,女性个个都学过防身术。本文只想讨论其中的一个细节:一百年后,人们使用什么语言开发软件?为什么这个问题值得思考?原因不是我们最终会用上这些语言,而是幸运的话,我们从现在开始就能用上这些语言。“Java 进化之路已走到尽头,.........

优快云资讯 4319

JAVA IO 从零实践 (6.BIO进化为NIO)

其实这个专栏 从一开始就是准备讲NIO的。但是前五篇还是实践了很多BIO的代码,主要是为了体会到同步阻塞迈向非阻塞的思想变化。更好的理解NIO。

陆续将以前写过的技术博客统一搬运到csdn 183

黑客与画家:11 一百年后的编程语言

很难预测一百年后的人类生活,只有少数几件事是可以确定的。那时,汽车将具备低空飞行能力,城市规划的法规将放宽,大楼可以造到几百层,大街上一天到晚看不见太阳,女性个个都学过防身术。本文只想讨论其中的一个细节:一百年后,人们使用什么语言开发软件?为什么这个问题值得思考?原因不是我们最终会用上这些语言,而是幸运的话,我们从现在开始就能用上这些语言。我认为,编程语言就像生物物种一样,存在一个进化的脉络,许许...

weixin_33973600的博客 557
上一篇: 《Effective Java》: Joshua Bloch访谈
下一篇: Ruby,Python不能威胁到Java的13个理由
JavaSxy
博客等级 码龄21年 1粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值