写点什么

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

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

关注

评论

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

SD-WAN组网对比传统组网有哪些优点?

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

解析阿里巴巴中国站商品详情API返回值的更新与变化

技术冰糖葫芦

API Explorer API 测试 pinduoduo API

云端集中管控边缘服务:利用 EMQX ECP 在 K8s 上快速部署 NeuronEX

EMQ映云科技

NeuronEX EMQX ECP eqmx

DDD-7-子域划分

南山

领域驱动设计 DDD 子域

DDD-8-实体设计

南山

【我在京东做产研】校招 2 年,个人角度(成长)回顾 - 行且知

京东科技开发者

openGauss- X-Tuner: 参数调优与诊断

Gauss松鼠会

数据库 opengauss 数据库·

从零到一,了解京东商品详情API返回值

技术冰糖葫芦

API Explorer API 测试 pinduoduo API

mysql磁盘碎片整理

京东科技开发者

DDD-6-限界上下文

南山

领域驱动设计 DDD 微服务划分 限界上下文

DDD-12-领域事件

南山

领域驱动设计 DDD 领域事件

智能引领,服务升级:哈银消费金融以科技力量重塑金融服务体验

Geek_2d6073

TapData 信创数据源 | 国产信创数据库 Vastbase 数据同步指南,加速国产化进程,推进自主创新建设

tapdata

数据同步

MySQL中为什么要使用索引合并(Index Merge)?

不在线第一只蜗牛

MySQL 数据库 索引

淘宝 API 接口的实际应用案例

Noah

日常工作中需要避免的9个React坏习惯

不在线第一只蜗牛

JavaScript 前端 React

DDD-11-领域服务

南山

领域驱动设计 DDD 领域服务

TikTok直播网络加速方法

Ogcloud

TikTok tiktok运营 tiktok直播 tiktok直播专线 tiktok矩阵

ChatGPT访问难?ChatGLM+花生壳打造可远程访问的平替方案

贝锐

内网穿透 ChatGPT AIGCC

黑神话悟空-快速部署

京东科技开发者

【2024最新】4000字搞懂sora!一张脑图贯穿!

EquatorCoco

人工智能 AI ChatGPT sora

mac强大的安卓文件传输工具:Android File Transfer for mac 版

你的猪会飞吗

Mac软件 Android File Transfer mac破解软件下载

DDD-9-聚合划分

南山

领域驱动设计 DDD 聚合根

专业视频和音频编码工具Adobe Media Encoder 2024 for Mac

Mac相关知识分享

浅析JVM invokedynamic指令和Java Lambda语法|得物技术

得物技术

Java JVM 企业号2024年8月PK榜

DDD-10-值对象设计

南山

领域驱动设计 DDD 值对象

矢量图形设计软件Illustrator 2024 for Mac中文激活版

Mac相关知识分享

探索贪心算法:解决优化问题的高效策略

快乐非自愿限量之名

算法

京东商品详情数据接口解析(实时数据含测试及示例)

tbapi

京东API接口 京东商品详情接口 京东商品数据采集

可以在mac电脑玩Red Alert红色警戒:红警 for Mac合集

你的猪会飞吗

红色警戒 mac软件下载 Mac游戏下载

车联网时代,车企掌控车载小程序生态最关键

Geek_2305a8

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