写点什么

Java 8 会干掉 Scala 吗?

  • 2014-04-10
  • 本文字数:2398 字

    阅读完需:约 8 分钟

最令人期待的 Java 8 已于 2014 年 3 月 18 日发布,该版本包含很多令人兴奋的新特性,被认为是自Java 5 发布以来对Java 做出的最大改变。对于开发者而言,最值得注意的特性包括: Lambda 表达式 / 闭包接口支持静态方法默认方法、函数式接口、 java.util.stream 、改善了泛型中对类型推理的支持、 java.time 以及 Nashorn JavaScript 引擎。另外,新版本还移除了PermGen

而被一部分人认为是Java 替代者的Scala 则是一门有趣的语言,它一方面吸收并继承了多种语言中的优秀特性,另一方面也没有抛弃Java 这个强大的平台,它可以运行在 Java 虚拟机之上,能够轻松地与Java 互联互通。与Java 不同的是,Scala 既支持面向对象的特性,又支持函数式编程,它的风格和特性吸引了大量的开发人员,那么新版本的Java 能否借助大量的特性“创新”干掉Scala 呢?系统架构师、开源布道者Ahmed Soliman 最近在自己的博客上发表了一篇博文表达了自己的看法,同时这篇文章在 LinkedIn Hacker News 上也引起了激烈的讨论,下面是笔者摘录的一些观点。

Ahmed Soliman 认为:

Java 8 新引入的 Lambda 表达式并不像 Scala 中的 Lambda 那么强大,它仅仅触及了 Lambda 的皮毛。例如,并不是所有函数都可以作为一等元素(first-class)传入其他函数中,函数必须被显式地定义为 Lambda 表达式或者使用函数式接口。在集合操作方面,借助于新的 java.util.stream 包,开发人员可以在一些 Java 集合上编写函数式风格的操作,这和 Scala 中的方法类似,但是后者更简洁、类型更精确。Java 和 Scala 之间依然有很大的差距,Java 并不会变成一门函数式语言,它的目标是企业,同时要保证稳固的向后兼容性;而 Scala 的目标则是多核软件开发。Java 8 向前迈出了伟大的一步,这一点让很多人都非常兴奋,甚至对于 Scala 程序员也是如此,但是它的目标并不是“干掉”Scala,事实上,这两者应该是一种互补的关系。

来自于 Reply 的 Stefano S 回复说:

Scala 在设计上就是函数式,而 Java 则是被扩展成函数式,在函数式的纯度上这两门语言就不一样,我认为 Java 8 是否能够取得成功很大程度上取决于 JDK 的实现情况。如果 JDK 8 稳固且凝聚性高,那么对 Scala 而言必然会造成巨大的冲击。如果仅仅需要学习一些新的语法就能利用和其他语言相似的语法及特性,那放弃自己熟悉的语言去学习一门新语言的理由是什么呢?

openForce 信息技术的拥有者 GesmbH 评论说:

Java 不可能替代 Scala。首先 Scala 开发非常活跃,设计清晰,目标明确。JDK 的开发则比较停滞。很显然,对于 Oracle 而言按时交付一个新的 JDK 好像有一些麻烦。所以,我个人对 JDK 8 在 2014 年能否包含之前承诺的所有特性持怀疑态度。而就 Scala 而言,如果一切进展顺利,那么我们可以在今年见到 Scala 2.11,该版本会解决很多令人讨厌的问题。其次,JDK 类库在设计上就有一些缺陷,要成为一门真正的函数式语言必须要解决这些缺陷,例如集合框架。再就是 Java 相对于很多其他的语言太过于啰嗦,我使用 Java 开发了 12 多年的企业应用,而使用 Scala 才两年,但是我并不想回到过去。当然 Java 生态系统非常优秀,JVM 也非常伟大,但是 Java 作为一门语言已经有点过时了。

数据和软件工程师 Adam R 评论到:

我认为 Java 8 的函数式功能太少,来得也太迟了。虽然这确实是一个改进,但是距离 Scala 依然很远。那些真正在乎这些功能的开发人员早就转向了其他的函数式语言。Java 8 确实会为 Java 开发人员带来函数式编程的意识,但是一部分开发人员期望获得更多的特性,而另一部分则根本不在乎。

来自于 Cabot Research 的软件工程师 Brian T 认为:

考虑到 Java 7 给我们带来的灾难,同时鉴于 Java 8 仅实现了闭包的一部分而其余部分将会在 Java 9 中实现,我认为 Scala 根本没必要担心。就是在昨天我们不得不将一台新机器从 Java 7 回退到 Java 6,原因是一些 Eclipse 插件无法在新版本上工作。Java 8 可能会是少数人使用(相对而言)的一门优秀语言。

Eranation 在 Hacker News 上评论说:

作为一个 Scala 和 Java 开发者,我甚至没有一点兴趣在下一个项目中放弃 Scala 转向 Java 8。如果只能选择 Java,那么最好是 Java 8,但是如果有其他选择,我想除了 Lambda 之外 Scala 还有很多吸引我的地方。

所有的东西都是表达式,它支持推导式(特别是有多种可能的情况,使用漂亮的语法解决死亡回调三角)、隐式转换、Case 类、模式匹配、元组、字符串插入、多行字符串、默认参数、命名参数、类型推断、内置依赖注入,同时所有元素的 equals 和 hashcode 方法都已经被正确地实现(可以使用元组甚至是数组作为 map 的键)。

我认为 Scala 依然会呆在这里,至少对于 Scala 开发人员来说是这样的,我非常确定没有任何一个 Scala 开发人员会说:“Java 8 支持 Lambda 表达式了?非常好,再见 Scala!”。我会考虑 Java 8 只有两个原因,就是编译时间和二进制兼容性。如果忽略掉这两个原因,我只能说 Java 8 所做的这一切恰好证明了 Scala 正走在正确的路上。

我确实希望 Scala 能够提升它与 Java 8 的互操作性,例如用同样的方法支持函数式接口,向 Java 8 集合中添加新的隐式转换等。如果有一门语言具备 Scala 的所有功能,同时做的比 Scala 更好,那么我会毫不犹豫的使用它。但是到目前为止我还没发现有这样一门语言(当然,我需要的是基于 JVM 的语言,同时最好是一门静态类型的语言,所以选择余地并不是很广)。Java 8 有非常大的提升,我很高兴 Java 开发人员能够使用这些特性,但是这并不是让大家考虑从 Scala 转向 Java 的原因。

本文只摘录了 LinkedIn Hacker News 上面有关于此讨论的部分观点,如果你想了解更多的信息,可以自己去查看详细内容。


感谢吴海星对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-04-10 02:3315929
用户头像

发布了 321 篇内容, 共 127.5 次阅读, 收获喜欢 19 次。

关注

评论

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

云智一体,深入生命科学

百度开发者中心

云智一体 生命科学 #人工智能

使用 CnosDB 与 TensorFlow 进行时间序列预测

CnosDB

tensorflow 时序数据库 时间序列预测 CnosDB

对话 BitSail Contributor | 吴畅:从好奇,到深入

字节跳动数据平台

大数据 开源 开发者 数据集成 企业号 3 月 PK 榜

天天预约|新功能工具「美团优惠券」上线啦!

天天预约

计算界年度大赛“先导杯”再度来袭!

科技热闻

JDK20正式发布了GA版本,短期维护支持,以及JDK21预览

小小怪下士

Java 程序员 jdk 后端

捷讯!索信达中标光大银行“线上流量经营模型工厂”项目

索信达控股

中国券商数字化转型趋势报告2023

易观分析

金融 券商 经济

MobPush,专业和免费的消息推送SDK

MobTech袤博科技

模块9作业

梁山伯

你掌握了吗?在PCB设计中,又快又准地放置元件

华秋PCB

模块 元器件 PCB 原理图 PCB设计

《流浪地球2》里的机器人企业,如何高质量地交付产品?

万事ONES

最新Github霸榜标星96K!号称Java八股“PLUS”版,限时开源!

Java编程日记

Java 程序员 架构 Java 面试 java程序员

喜讯:祝贺行云绽放荣获深圳市专精特新企业称号

行云管家

云计算 深圳 专精特新

独家Java架构师题,面试再不过找我来要赔偿,谢谢

Java你猿哥

架构 面试 ssm 面经 java实战

软件工程中建模的底层逻辑

阿里技术

软件工程 建模

【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

MobPush Android SDK合规指南

MobTech袤博科技

详解MyBatis加载映射文件和动态代理

Java mybatis

软件测试/测试开发丨只懂黑盒测试也能学会的代码覆盖率及精准化测试

测试人

软件测试 自动化测试 精准测试 测试开发 代码覆盖率

百度智能云将在3月27日发布系列文心一言云服务和应用产品

百度开发者中心

#人工智能 文心一言

三大升级!百度智能云加速文心一言产业化落地

百度开发者中心

#人工智能 文心一言

直播|SeaTunnel 与 StarRocks 生态融合--让大数据处理回归「简单」

StarRocks

数据库 数据库·

火山引擎DataTester:抖音的设计团队是如何用A/B测试实现高效优化的?

字节跳动数据平台

大数据 AB testing实战 抖音 A/B 测试 企业号 3 月 PK 榜

数仓发展史:大数据的“底气”来自于哪?

鼎道智联

大数据 数据仓库

知乎三天点击破亿!四天精通springcloud微服务架构

Java你猿哥

微服务 微服务架构 Spring Cloud 从分层架构到微服务架构

镜舟数据库与用友 YonBIP 完成兼容性认证,携手赋能企业数智化发展

镜舟科技

数据库

对话抖音电商:量级庞大、参差不齐,“数据质量治理”有妙招!

字节跳动数据平台

大数据 数据治理 电商 抖音 企业号 3 月 PK 榜

Java 8会干掉Scala吗?_Java_孙镜涛_InfoQ精选文章