2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Java 语言架构师 Brian Goetz 谈 Java 可能如何演变

  • 2025-09-27
    北京
  • 本文字数:2914 字

    阅读完需:约 10 分钟

大小:1.30M时长:07:34
Java语言架构师Brian Goetz谈Java可能如何演变

本文最初发布于 THENEWSTACK 博客。

 


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

 

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

 

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

 

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

 

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

 

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

 

“可成长”语言的哲学

在演讲开始时,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 的幻灯片上有这样一句话,“有人会说这太过分了,有人会说这还不够。”

 

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

 

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

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

 

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

 

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

 

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

 

public static final Comparator COMPARATOR =
复制代码

 

就变成:

 

public static final witness Comparator COMPARATOR =
复制代码

 

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

 

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

 

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

 

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

 

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

 

发展机遇:潜在的新 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 说,他想延续这一传统。

 

Java 未来发展路线图

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

 

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

 

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

 

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



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



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

 

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

 

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

 

声明:本文为 InfoQ 翻译,未经许可禁止转载。

 

原文链接:https://thenewstack.io/java-language-architect-brian-goetz-on-how-java-could-evolve

2025-09-27 12:006381

评论

发布
暂无评论

【前端】一文彻底学会Promise

恒生LIGHT云社区

JavaScript 前端 Promise

近数据处理(NDP)——GaussDB(for MySQL)性能提升的秘密

华为云开发者联盟

MySQL 多线程 GaussDB(for MySQL) 近数据处理 算子下推

关于dart中的late关键字,你了解多少?

坚果

flutter dart 1月月更

霸屏综艺,牵手明星,扩列神器皮皮APP的出圈始末

联营汇聚

linux系统管理与自动化运维工具用哪款好?

行云管家

Linux 运维 IT运维 自动化运维

Tech Talk 活动预告|“公有云+5G” 时代下的开发难题,架构师大咖带你逐个击破!

亚马逊云科技 (Amazon Web Services)

网络

🏆【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一同来看看RocketMQ和Kafka索引设计

码界西柚

RocketMQ Alibaba Alibaba技术 1月月更

使用 KubeSphere 管理 Amazon EKS Anywhere 集群

亚马逊云科技 (Amazon Web Services)

网络

您有一份Microsoft Office 365技能宝典等待签收

淋雨

Office 365 office办公软件

【网络安全】你必须知道的几个网络安全概念

行云管家

运维 网络安全 防火墙 IT

java开发之SpringBoot转发和重定向

@零度

JAVA开发 springboot

大数据开发之离线分析工具Hive

@零度

大数据 hive

Karpenter : 新一代 Kubernetes auto scaling 工具

亚马逊云科技 (Amazon Web Services)

网络

大画 Spark :: 网络(2)-上篇-通过网络收取消息的过程

dclar

大数据 spark Spark 源码

The Data Way Vol.9|还不清楚商业化之于开源的价值?建议你看看这家公司

SphereEx

数据库 开源 播客 ShardingSphere SphereEx

2022年,跨境ERP还是一门好生意吗?

ToB行业头条

APP性能分析工作台——你的最佳桌面端性能分析助手

字节跳动终端技术

字节跳动 APM Mars 应用性能监控产品

研读网络安全法律法规,提升技术管理者 “法” 商

星环科技

全面拆解携程云原生实践,打造智能弹性的云端酒店直连系统!

亚马逊云科技 (Amazon Web Services)

网络

盘点 | 常用 PG 数据恢复方案概览【建议收藏】

RadonDB

数据库 postgresql RadonDB

服务探活的五种方式

捉虫大师

微服务 dubbo 健康检查 服务探活

百度搜索中台新一代内容架构:FaaS化和智能化实战

百度Geek说

架构 后端 搜索 Faas

开发者喜欢的“夜宵”是什么?揭秘开发者的独特“口味”

OceanBase 数据库

数据库 开源 新年 oceanbase 开发者大会

强化云原生基础服务,焱融科技 YRCloudFile 与秒云完成产品兼容性互认证

焱融科技

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

万字总结Keras深度学习中文文本分类

华为云开发者联盟

深度学习 CNN keras 文本分类 TextCNN

巧用Amazon PrivateLink——轻松访问私有终端节点Amazon S3

亚马逊云科技 (Amazon Web Services)

网络

如何突破职业瓶颈

FunTester

Go 性能测试 测试框架 FunTester 职业瓶颈

高新技术企业几维科技加入龙蜥,为操作系统安全添砖加瓦

OpenAnolis小助手

Linux 开源

一文了解登陆Hoo虎符的Moonbeam治理通证GLMR

区块链前沿News

Hoo 虎符交易所 Moonbeam GLMR

低代码实现探索(十三)字典.静态实体.系统变量

零道云-混合式低代码平台

Java语言架构师Brian Goetz谈Java可能如何演变_编程语言_David Cassel_InfoQ精选文章