「ArchSummit·深圳」人工智能如何促进工业和制造领域的智能化转型? >>> 了解详情
写点什么

观点:Scala 会成为新的 EJB 2 吗?

  • 2011-12-08
  • 本文字数:1997 字

    阅读完需:约 7 分钟

近日,Joda Time 库的开发者与 JSR 310 Java 语言日期时间改进的规范领导 Stephen Colebourne 就 Scala 语言的适用性发表了一篇令人深思的文章。他比较了 Scala 与 EJB 2,并认为 EJB 2 是 Java EE 规范的低谷。

…大量的样板代码、XML 和复杂性已经渗透到了 Java 产业中。规范已被广泛采纳,但与这种采纳相伴的却是批评。开发者发现虽然 EJB 2 试图通过抽象的更高层的 API 来降低构建企业应用的复杂性,但事实上,它却增加了更多的复杂性,并且没有获得预期的结果。

虽然他偏爱 Fantom 语言——但也对其他语言如 Kotlin、Groovy 和 Ceylon 充满了好感——他认为 Scala 并不适合于未来的发展。

他感到不爽的一个地方就是 Scala 并未提供合适的模块化系统。他说 Java 一开始也没有提供模块化系统(目前依旧没有,但至少这是现在人们普遍存在的一个需求),只能通过其他手段如 Maven、Ivy 和 OSGi 等达成。然而,那些忽视模块化系统的人还是会给需要的人带来麻烦;在处理大型系统时,模块化将成为重要的维护工具。

Stephen 还表示假如 Java 有模块化系统,那么就可以发布不支持 CORBA 的 JVM 了,CORBA 是个遗留技术,在 Java 领域中,除了 RMI 外现在已经很少使用了(对于服务器间的通讯来说,CORBA 已经逐步被 SOAP 和 REST 所取代)。

事实上,两年前就有人提出了关于模块化的提案,但很快就被束之高阁。对于模块与版本存在很严重的阻力(每个模块系统都需要依赖他们来运作)。在那时, Scala 尚未进入到企业;两年过去了,Scala 的境况依然如故。

Stephen 还指出类型系统过于复杂了,在这一点上,他认同 Steve Yegge 的观点:

语言规范,天哪,我简直无话可说了。我必须得在博客上写点什么才行。规范中大约 90% 的内容都是关于类型系统。这将是你有生之年所能见到的最大的类型系统,其复杂程度并不是一个数量级,甚至能达到 5 个量级。除了类型就是类型,然后还是类型;太复杂了。 他们称其为 complexity complexity,这意味着它并不仅仅是 complexity 的问题;也不是 complexity-complexity 的问题:而是参数化的 complexity-complexity,我要说的是这种东西就是在类型上堆积类型,然后再不断地堆积类型,太糙了吧。

Stephen 还重点强调了类型签名——一开始用于表示方法能够正确编译——现在变得越来越没有意义了,甚至在支持 Unicode 方法前就这样了。他给出了如下的方法签名,来自于 Scala 核心库,他想知道这个方法到底是干啥的:

def ++ [B >: A, That] (that: TraversableOnce[B])(implicit bf: CanBuildFrom[List[A], B, That]) : That

事实上,Stephen 认为使用静态类型会给静态类型蒙羞:

我想说的是,这个庞大的类型系统目的在于防止编译错误,并且对代码进行预检查。但要是将这种逻辑放到动态类型系统的语言中就不行了。对于我来说,Scala 的类型系统已经背离了语言特性的本质。 本质上,Scala 的类型系统给静态类型蒙羞了。

上面这些并不是什么新观点。Log4J 与 SLF4J 项目的创建者 Ceki Gülcü就在问 Scala 是否值得信任,因为这门语言已经演化了很多,多次违背了向后兼容性(未来也不见得会解决这个问题):

然而,Scala 语言有一点让我颇为不爽。每次新版本发布时,Scala 都破坏了二进制兼容性。尽管之前做过许诺,但 2.7 版依然破坏了兼容性,2.8 版又是这样,2.9 也不例外。我清楚这一点,当 Scala 库的特性以一种不兼容的方式发生变化时,Scala 语言的设计者也只能置兼容性于不顾了。

将 Ceki 的观点展开,在 Java 出现前,要想在不同操作系统和版本间实现可移植性,从源代码进行编译是不二之选。直到标准 C ABI 出现后,我们才可以在相同操作系统的不同版本间使用相同的二进制文件,最终导致了诸如 Debian、RedHat 和 Ubuntu 等二进制发布包的出现。由于缺少这些 ABI,很多公司都无法在早期的 Linux 内核 1.x 和操作系统上安装其商业产品的二进制版本(他们当然不想共享源代码了)。

Ceki 进一步说到“相互竞争的语言间的差距最终将会缩小,Scala 也将不会像现在这么酷了”。在一开始,Scala 有机会激发众多 Java 程序员的想象力。它诱使那些想要学习函数式编程的程序员们学习它,同时 Scala 又提供了更为简洁的代码。但由于一次又一次地将语言稳定性这一要义抛之脑后,同时又沿用几年前 Java 所用的那些手段(但却忽视了 Java 在各个版本间的兼容性),这一切都使得 Scala 游走于主流企业项目的边缘地带。没错,一开始是有些团队采用 Scala 并获得成功,但到目前为止,我还没听说哪个团队能够在一两年后还能继续维护好 Scala 代码基。

现在,有不少基于 JVM 的语言都值得我们去探索,从 Fantom 到 Xtend ,这些语言正在不断蚕食 Scala 的地位。甚至连 Java 都要在下一版本中提供模块化和 lambda 了;虽然被推迟了一年多,但将函数式编程带到 Java 中肯定要比 Scala 达到稳定快得多。在 Scala 步入正轨前 Java 将会迎头赶上。Scala,你太晚了。

查看英文原文: Opinion: Is Scala the new EJB 2?

2011-12-08 00:272708
用户头像

发布了 88 篇内容, 共 257.6 次阅读, 收获喜欢 7 次。

关注

评论

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

正则表达式.06 - 断言

insight

正则表达式 3月日更

问题剖析之消息队列的架构设计

Kylin

读书笔记 消息队列架构 3月日更

深入分析mysql为什么不推荐使用uuid或者雪花id作为主键

xcbeyond

MySQL MySQL优化 3月日更

第二届开发者社区【金码奖】,揭晓了!

京东科技开发者

开发者 开发者社区

LeetCode题解:64. 最小路径和,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

夺命剪刀脚(死锁)

鲁米

方法论 死锁

软考备考视频的目录

IT蜗壳-Tango

3月日更 软考

Python 注释

HoneyMoose

数据分析利器之Excel功能篇

小飞象@木木自由

MySQL原理

Sakura

28天写作 3月日更

你的决定我做主——锚定效应

Justin

心理学 28天写作 游戏设计

历史技术栈体系即将崩溃,我们如何应对?

VoltDB

数据库 5G 边缘计算 VoltDB

Everything is Serverless,从开源框架对比说起

华为云开发者联盟

云计算 开源 Serverless 云原生 无服务器

算法攻关-从上到下打印二叉树(O(n))_offer32

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作 算法攻关

Elasticsearch Reindex & Index Alias

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

法大大完成D轮9亿元融资,腾讯领投

人称T客

醒一醒,讲到 ZooKeeper 的选举机制了

HelloGitHub

Java zookeeper ZooKeeper原理

硬核干货丨借助多容器Pod,轻松扩展K8S中的应用

Rancher

如果写文字只是自我表达「Day 19」

道伟

28天写作

“七大属性加持,三个全新升级组件”这个高性能利器有点厉害

华为云开发者联盟

数据库 数据湖 Clickhouse 华为云 集群

FutureTask源码解析

程序员星星toC

多线程 Future future设计模式

Redis工具收费后新的开源已出现

happlyfox

学习 工具软件 28天写作 3月日更

ARTS - Week 6

Khirye

Java LeetCode arts

习惯

lenka

3月日更

Python 通过命令行安装包的时候 pip 提示错误

HoneyMoose

(28DW-S8-Day19) 以太坊是什么

mtfelix

28天写作

如何通过XMind 实践OKR 工作法

博文视点Broadview

甚至你可以在网抑云上听歌

ES_her0

28天写作 3月日更

四、MongoDB查询(2)

Kylin

读书笔记 分布式数据库mongodb 3月日更

Python yaml 使用的包

HoneyMoose

马特量化交易机器人系统开发网格策略

薇電13242772558

观点:Scala会成为新的EJB 2吗?_Java_Alex Blewitt_InfoQ精选文章