写点什么

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

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

关注

评论

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

分布式编译系统的搭建

GreatSQL

MySQL greatsql社区 分布式编译

涨薪60%,从小厂逆袭,坐上美团技术专家(面经+心得)

程序知音

Java 后端 java面试 java架构 Java进阶

MySQL 8.0中InnoDB buffer pool size进度更透明

GreatSQL

MySQL InnoDB greatsql社区

从入门到放弃再到成功—我的 Jira 插件探索之路

跟YY哥学Jira

Scrum cli Jira插件 Forge 团队速度

Python函数基础回顾

timerring

Python

一文带你了解EPM系统的发展史

智达方通

EPM 业财融合 智达方通 企业绩效管理 海波龙

自动化测试 | 如何在API开发中践行“设计优先”方法?SwaggerHub助您一臂之力

龙智—DevSecOps解决方案

API SmartBear

膜拜,国内算法大佬亲撰:数据结构与算法全解笔记

程序知音

Java 算法 数据结构与算法 后端技术

【Python实战】Python采集图片数据

BROKEN

三周年连更

论存储在智算与超算平台建设中的重要性

焱融科技

#分布式文件存储 #全闪存储 #高性能存储

MES系统中的BOM为何如此重要?先进的BOM体系怎么建立?

优秀

MES系统 BOM

我的职业规划 |社区征文

来碗老郭

三周年征文

中国信通院召开政企信息技术应用创新(信创)促进中心启动会

信通院IOMM数字化转型团队

信创 信创产业 信创生态

重塑数据活力 | 焱融科技与DaoCloud 道客完成云原生兼容性认证

焱融科技

#云原生 #高性能 #分布式文件存储 #文件存储 #分布式存储

五月到了,再来看看ChatGPT给我们带来了什么吧!

加入高科技仿生人

AI AIGC ChatGPT

推动变革,打造全新的全面预算管理解决方案

智达方通

智能多维数据库 多维数据库 业财融合 全面预算管理

Python文件和操作系统基础

timerring

Python

华秋干货铺 | PCB板为什么要做树脂塞孔?

华秋电子

得物直播低延迟探索 | 得物技术

得物技术

直播技术 直播推流 直播优化

如何参与Cetus和Oi! Network联合ISO认购和空投奖励?

股市老人

版本控制 | 如何使用虚幻引擎的多用户编辑(MUE)功能

龙智—DevSecOps解决方案

版本控制 虚幻引擎 虚拟制作 虚幻多用户编辑

AIGC产业研究报告 2023——图像生成篇

易观分析

产业 智能

使用篇丨链路追踪(Tracing)很简单:链路拓扑

阿里巴巴云原生

阿里云 云原生 链路追踪 Tracing

演讲回顾 | 释放Atlassian工具的力量

龙智—DevSecOps解决方案

Atlassian Jira Atlassian 云版

AIGC遇上低代码的碰撞与融合

力软低代码开发平台

巴别时代基于 Apache Paimon 的 Streaming Lakehouse 的探索与实践

Apache Flink

大数据 flink 实时计算

大咖观点| AIGC与因果推断的双向赋能

九章云极DataCanvas

iOS MachineLearning 系列(10)—— 自然语言分析之文本拆解

珲少

标签系列:标签的价值、生产与评价

小鲸数据

标签 CDP 用户画像 标签体系 精准营销

八股MQ003——聊聊Consumer

Codyida

后端

选择无服务器:Babbel 的迁移故事

亚马逊云科技 (Amazon Web Services)

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