Java语言架构师Brian Goetz谈Java可能如何演变
创始人
2025-09-29 20:04:33
0

作者 | David Cassel

译者 | 平川

策划 | Tina

本文最初发布于 THENEWSTACK 博客。

在上个月举行的 JVM 峰会上,Java 语言架构师 Brian Goetz 在演讲中 展望 了 Java 的未来发展。

Goetz 探讨的并非 Java 的现状,而是假设的一系列特性——这些特性不是为了编写更好的程序,而是作为一种机制,使语言更具可成长性和可扩展性。”

简而言之,Goetz 介绍了他如何看待 Java 语言的演变。

Goetz 说,“我花了很多时间研究其他语言的做法。我们觉得,对于应该如何推进这项工作,我们现在已经有了一个相当清晰的认识。”

在 Reddit 上,Goetz 将他的演讲描述为“陈述可能的发展方向”。目前还没有正式的 Java 增强提案,他表示,“这实际上是我们第一次详细讨论这个问题。总要从某个地方开始。”

这是一个绝佳的机会,不仅能见证编程语言的演变历程,更能窥见推动这些决策背后的深邃哲学。

1“可成长”语言的哲学

在演讲开始时,Goetz 强调,他不是要谈论“计划立即交付的特性”。相反,他将看一些长远来看“更具启发性的例子”。Goetz 将演讲标题定为“Java 语言的成长(Growing the Java Language)”是有原因的。Goetz 记得,1998 年,Sun Microsystems 计算机科学家 Guy Steele 发表过一篇著名的论文(和 演讲),标题是“一门语言的成长(Growing a Language)”。

Goetz 说,Steele 发出了“一个行动号召,要求语言设计者将可成长性作为编程语言设计的核心维度之一。”

虽然许多语言允许用户通过用户创建的库来扩展“词汇”,但 Steele 指出,如果新词汇看起来与语言自己的基本“原语”不同,那无疑会增加困难。Goetz 说,“在很多方面,这篇论文是 Valhalla 项目的发令枪”——这是一个始于 2014 年的 OpenJDK 项目,由 Goetz 领导,旨在孵化新的 Java 语言特性。

因此,Goetz 想要描述的不是 Java 的新特性,而是一种语言演变哲学——在添加 新的 Java 特性 时优先考虑可扩展性——及其实现机制。Goetz 的幻灯片上有这样一句话,“有人会说这太过分了,有人会说这还不够。”

“而我们就是这样知道我们……正好在中间。”

2在 Java 中引入一个新概念:Witness

那么这个新理念是什么呢?Java 的方法定义接口被称为“行为蓝图”。Goetz 表示,现在“我们希望实现接口的所有功能——将一组命名行为归入命名集合(named bundle),用于声明某种类型或某组类型(并允许编译器进行类型检查)。“

这里有一个关键的区别:Java 语言设计团队希望它是关于类型的,而不是类型实例。

有一张幻灯片解释说,“我们想将这种行为转移到第三方 witness 对象上”。

为此,只需提议增加一个简单直接的关键字——一个 witness字面量。这样一来:

publicstaticfinalComparatorCOMPARATOR=

就变成:

publicstaticfinalwitness ComparatorCOMPARATOR=

后来,Goetz 向听众解释说,“在 Java 中添加类型类,只需在现有的语言结构(如接口、字段和方法)上添加相对较少的内容——一个发布 witness 的机制和一个查找 witness 的机制。”

为什么不直接定义包含所有所需方法的接口,然后让类实现那个接口呢?Goetz 指出,事实证明这种抽象方式并不总是有效,它会让语言设计者面临大量棘手的边界情况和“陷阱”。。

Goetz 的下一张幻灯片解释说,这是“真的用错了工具。”

“我们需要某种与接口相似但又不完全相同的东西。”Haskell 有类型类(“对类型本身进行抽象,而不是类型的行为”),而 C# 和 Kotlin 都在“进行他们自己的一系列探索”。C# 社区提出了类似的东西:shape 和 extension。

“所有这些都是围绕同一个问题,那就是:如何抽象类型的行为,而不把它作为类型定义的一部分?”

3发展机遇:潜在的新 Java 特性

Goetz 说,这个想法已经迭代了许多次,“我们已经将其提炼成更符合 Java 的东西,比之前的一些想法更简洁。”

有一张幻灯片说,“这是关于语言成长的”。Goetz 看到了“可成长性”的巨大潜力,并提出了几个新的潜在特性:

  • 新的数值类,但与“原始类型的运行时行为一样”——比如 16 位浮点数。

  • 数学运算符。Goetz 说,对于 Float16 变量来说,使用标准的加号“就非常好”,而不是单独的方法。其他语言已经尝试了这种所谓的“运算符重载”——根据涉及的变量类型,将符号与多个操作关联起来。Goetz 说,这“在某种程度上是语言的雷区……许多语言都在使用运算符重载时都遭遇了各种灾难性的问题。”

  • 集合表达式,“用于构建类似序列的结构”,类似于 C# 中提供的功能。“在规范层面上,这是一个‘你为什么不直接……’的问题。但这似乎是一条可行的路径,不像 Java 7 时代的提议那样不可行。”

  • 创建型表达式(Creational expression)。在创建数组时,元素的值默认总是“null”或零。如果有一个 witness 可以表明何时存在(和不存在)有效的“空白”值会怎样?Goetz 说,在 Valhalla 项目中,在初始化数组时添加有效性检查“一直是我们比较犹豫的一个特性”,因为他们不想把它添加到 Java 虚拟机(VM)中。但“这种方法可以将该特性保留在语言中,同时又允许特定的类在参与该特性时以是否需要做额外的工作为依据。因此,这意味着我们可以将这种行为放到一个合适的地方,这感觉很好。”

多功能语言扩展并非没有先例。Goetz 提到了两个早期的“使用库扩展语言特性的著名例子”——foreach 循环和 try。开发者只需实现 Iterable 类就可以使用 foreach 特性。(Goetz 说,为了实现 Iterable,JDK 的开发者随后“对许多类进行了改造”——其他 Java 开发者也这样做了。)但最重要的是,它看起来就像是“内置的”。

Goetz 很高兴 Java 没有将该特性限制在少数几个显而易见的用例(如列表、映射和集合)中。“我真的很高兴有人站起来说,‘不,不,除了少数魔法类之外,其他类能够参与其中真的很重要。’”

Goetz 说,他想延续这一传统。

4Java 未来发展路线图

在演讲结束时,Goetz 说,它不仅展示了 witness 的概念,还勾勒出了“如何将其用于四个潜在的特性,而这些特性已经困扰我们很长时间了。”

展望未来,Goetz 相信,witness 将“使你能够设计出更好、更丰富的特性,让用户可以做更多事情的特性。最终,我们将来也许不再需要设计那么多的语言特性。……从长远来看,希望我们能够利用这一点来构建功能更丰富的通用库和条件行为等。”

“但短期内,我们可以用它来提供可扩展的语言特性,包括人们长期以来一直希望添加的特性。”

Reddit 上有一位评论者后来甚至开玩笑 说,Goetz 的演讲让他们想起了“龙与地下城”中的法术。“绝对有那么一个时刻,我感觉 Brian 马上就要施放魔法飞弹了。”

他后来补充说,“这是一次很好且非常有趣的演讲。我希望这些特性能够实现。”但 Goetz 的最后一张幻灯片清楚地说明了我们目前所处的位置。“前几张幻灯片中的例子还不是设计,只是想法。”

尽管如此,在 另一条 Reddit 评论 中,Goetz 表示,Java 设计团队现在有一个让他们“感到舒适”的故事,“所以我们准备分享它。但请注意,那仍然是一个故事,还需要 Valhalla 项目先完成许多事。”

Goetz 的演讲赢得了热烈的掌声,随后他开始接受观众的提问。首位提问者坦言,他看到了该理念的巨大价值,并称 Goetz 的演讲是“一个相当宏大的提案,却只需要相当小的语法变更”。

Goetz 的回应?“嘘,别告诉他们!”

相关内容

热门资讯

终于清楚!拱趴大菠萝挂怎么安装... 终于清楚!拱趴大菠萝挂怎么安装,拱趴大菠萝挂哪里,wepoke教程(有挂介绍)1、实时拱趴大菠萝挂怎...
透视脚本!aapoker ai... 您好,aapoker ai插件这款游戏可以开挂的,确实是有挂的,需要了解加微【757446909】很...
透视脚本!wepoker辅助器... 透视脚本!wepoker辅助器有哪些功能,wejoker手机版透视脚本,分享教程(有挂解说)wepo...
盘点一款!约局吧德州有挂吗,佛... 盘点一款!约局吧德州有挂吗,佛手在线大菠萝智能辅助器,新2025版(有挂技巧)1、玩家可以在佛手在线...
透视脚本!aapoker万能辅... 透视脚本!aapoker万能辅助器(透视)详细辅助插件工具器(都是真的是有挂)1、游戏颠覆性的策略玩...
透视脚本!wepoker破解游... 透视脚本!wepoker破解游戏盒子,wepoker可以透视码,插件教程(有挂辅助);1、该软件可以...
透视脚本!aapoker怎么控... 透视脚本!aapoker怎么控制牌(透视)详细万能辅助器助手(确实是真的有挂);aapoker怎么控...
一分钟了解!pokemmo辅助... 一分钟了解!pokemmo辅助器手机版下载,德州透视竞技联盟,安装教程(有挂介绍)1、下载好poke...
透视脚本!wepoker透视是... 透视脚本!wepoker透视是真的吗(透视)详细辅助是真的假的黑科技(总是真的是有挂)wepoker...
透视脚本!aapoker怎么提... 透视脚本!aapoker怎么提高中牌率,aapoker辅助软件合法吗,力荐教程(有挂工具)aapok...