50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:002

评论

发布
暂无评论

按键编码ASCII对照表

入门小站

工具

一分钟了解MACH架构

俞凡

架构

阿里P8不眠不休,用了两个月整理出这本32W字Java面试手册,在Github上引起震动

Java 编程 程序员 面试 计算机

什么是产品感?

吴世亮

产品 产品设计 数字化 产品感 sense

说要内推阿里的学长,替我整理好的Java面试题,分享给大家

Java spring 程序员 架构 编程语言

【SpringCloud 技术专题】「Eureka 源码分析」从源码层面让你认识 Eureka 工作流程和运作机制(下)

码界西柚

微服务 SpringCloud Eureka 注册中心 9月日更

iOS 优雅的处理网络数据,你真的会吗?不如看看这篇.

HelloWorld杰少

大前端 引航计划

24. AI只是人类的工具

Databri_AI

人工智能

做一个有温度的程序员

牧小农

跪了!阿里官方出品Spring Security王者手册,Github获赞70k+

spring 程序员 编程语言

linux之systemctl命令

入门小站

Linux

「免费开源」基于Vue和Quasar的前端SPA项目crudapi零代码开发平台后台管理系统实战之元数据导出导入(十五)

crudapi

Vue API 元数据 crudapi quasar

【得物技术】MySQL 8.0:新的身份验证插件(caching_sha2_password)

得物技术

MySQL 默认方法 得物技术 身份 身份插件

"你的网站加载速度很慢怎么办?"——技术经理在面试中可能遇到的可怕问题

云原生

架构 面试 web技术 职业生涯

Nebula Graph 源码解读系列 | Vol.02 详解 Validator

NebulaGraph

图数据库 源码学习 分布式图数据库

Linux用户所属组变更

在即

9月日更

架构实战训练营|作业|模块4

Frode

「架构实战营」

绝绝子!LeetCode官网首发的1137页的数据结构与算法刷题指南

Java 编程 程序员 面试 计算机

架构实战营模块四

WolvesLeader

「架构实战营」

Nebula Graph 源码解读系列 | Vol.03 Planner 的实现

NebulaGraph

图数据库 源码学习 分布式图数据库

模块四作业设计千万级学生管理系统的考试试卷存储方案

apple

SRE实战(01)|初识SRE,探索SRE如何推进技术债务改造

方勇(gopher)

微服务 架构设计 SRE 服务治理 构架

被阿里奉为“座上宾”!2021公认最权威的分布式微服务指导手册

Java 程序员 面试 微服务 计算机

终于有人把大厂面试必考的动态规划、链表、二叉树、字符串全部整理出来了

Java 架构 面试 算法 后端

Alibaba2021全新Java高并发终极版手册,现已在Github上标星80K

Java 编程 程序员 面试 计算机

北鲲云超算平台有哪些形式为高性能计算用户提供算力服务?

北鲲云

Postman 如何调试加密接口?

星安果

Postman

阿里内部神作Java并发原理JDK源码手册让Github沸腾,现已开源

Java 编程 程序员 面试 计算机

Go 中更好的定时调度

baiyutang

golang 9月日更

java 虚拟机 GC 学习笔记二

风翱

JVM 9月日更

网关乱码问题排查纪实

小江

k8s java; 字符集 ,docker JVM;

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