写点什么

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:3315747
用户头像

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

关注

评论

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

怎样才能让业财融合真正为企业数智化转型起到推动作用?

用友BIP

财务共享

项目很大,是否忍一下?

巨梦科技

微前端

进阶神册!Redis+Nginx+设计模式+Spring全家桶+Dubbo核心技术笔记

程序知音

Java 数据库 spring java架构 Java进阶

数字化转型应该如何去做?(过程管理方法篇)

数字随行

数字化转型

利用跨端框架和小程序容器技术,打造一致体验的多平台应用

FinFish

小程序 小程序容器 跨端框架 小程序化

Last Week in Milvus

Zilliz

非结构化数据 Milvus Zilliz 向量数据库

踢碎破局陷阱,来一场酣畅淋漓的 SLG!

网易智企

AI AIGC

GreptimeDB 使用指南|快速查询分析外部数据

Greptime 格睿科技

数据库 分布式 云原生 时序数据库 使用指南

万众瞩目的Nautilus Chain即将上线主网,生态正式起航

大瞿科技

水泥行业全球第一企业怎么进行财务共享建设?

用友BIP

财务共享

AI浪潮再掀低代码开发热,快来了解最新趋势!

加入高科技仿生人

人工智能 低代码 AI技术

inBuilder今日分享丨表单设计器画布渲染引擎揭秘

inBuilder低代码平台

开源大模型新SOTA!支持免费商用,比LLaMA65B小但更强,基于1万亿token

Openlab_cosmoplat

开源社区 falcon

云服务器与独立服务器的性能比较:您需要了解的关键差异

一只扑棱蛾子

云服务器 独立服务器 服务器性能

Wallys/DR5018+QCN6122/support for the latest Wi-Fi standards in networking devices.

Cindy-wallys

ipq5018 QCN6102 QCN6122

点云标注技术推动该领域的发展

来自四九城儿

Kyligence x 明道云|低代码平台助力中小企业实现存量背景下的创新增长

Kyligence

数据分析 低代码平台 指标平台

财务共享五大价值助力央企构建世界一流财务管理体系

用友BIP

财务共享

通过SQL获取每个月第n周任意天的数据

搞大屏的小北

sql查询 sql 第一周 每个月 周一

AIGC下的低代码赛道,你我皆是拓荒人

引迈信息

AI 低代码 AIGC JNPF

数据可视化:分布类可视化图表大全

2D3D前端可视化开发

大数据 数据分析 数字化转型 数据可视化 数据可视化工具

拿到字节跳动奖学金,入职字节跳动做科研,他们经历了什么?

字节跳动技术范儿

字节跳动 语音合成 模型压缩

利用透明压缩技术解决企业级SSD读写延迟挑战

ScaleFlux

压缩算法 固态硬盘 企业存储

论数字化大趋势下,建设财务共享中心的重要性

用友BIP

财务共享

多元办公场景下,企业如何保障工作效率与数据安全流通?

人称T客

LangChain 查询使用指「北」

Zilliz

Milvus AIGC 向量数据库 zillizcloud langchain

西南财经大学李玉周:数智化技术广泛使用推动管理会计加快落地

用友BIP

智能会计 价值财务

软件测试/测试开发丨Web自动化测试高级定位xpath

测试人

程序员 软件测试 自动化测试 测试开发

怎样将图片直接转换为3d模型?

真大的脸盆

Mac Mac 软件 图片转换工具 图片转换模型软件

MobTech MobLink|小程序、网页跳转App的原理

MobTech袤博科技

RocketMQ 多级存储设计与实现

阿里巴巴云原生

阿里云 RocketMQ 云原生

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