InfoQ 专访 Oracle 架构师 Goetz:在 Java 中引入连字符关键字

阅读数:4223 2019 年 9 月 3 日 08:52

InfoQ专访Oracle 架构师Goetz:在Java中引入连字符关键字

Brian Goetz 是 Oracle 的 Java 语言架构师,他一直在追求 Java 语言的生产率和性能。 Alex Buckley 是 Oracle 的 Java 语言和 Java 虚拟机的规范主管。他们两个提出了一组带连字符的关键字

正如在 JDK-8223002 中规定的,实现连字符关键字的目标是:

  • 面向 Java 编程人员的新功能语法。
  • 解决关键字变得非常稀缺的永恒问题。
  • 给 Java 语言设计人员提供不同类型的关键字样式建议。

近几年来,有些技术已被用于发展 Java 语言的关键词演化:

[a] 支配权 (eminent domain)—— 把标识符重新分类为关键字(比如 Java 1.4 中的 assert 和 Java 1.5 中的 enum);
[b] 重载 —— 把已有的关键字重新用于新功能;
[c] 变体 (distort) —— 使用现有关键字创建语法(如 @interface);
[d] smoke and mirrors —— 在不同上下文中使用新关键字创建一个语法糖 (如 var 限于局部变量)。

在某种程度上,这些关键词技术都有一些问题。比如,添加 assert 作为关键字几乎破坏了所有测试框架,因为导致了关键字、标识符冲突。

所以,采用带连字符的关键字将弥补现有的关键词技术,并将使用现有的类和 / 或上下文关键字的组合。类关键字是“一串字母,这些字母总是被标记为关键字,而不是标识符。”上下文关键字是“一串字母,这些字母只有在特定上下文中才被标记为关键字,但是在其他上下文中被标记为标识符。”潜在的带连字符的类关键字的将包括:non-final、break-with 和 value-class。潜在的带连字符的上下文关键字包括:non-null、read-only 和 eventually-true。

实现带连字符的关键字的挑战之一是词法分析器如何把 a-b 类的表达式解析成 3 个令牌(标识符、操作符、标识符)或解析为带连字符的关键字。

今年早些时候的一场 OpenJDK电子邮件讨论建议,为 JKD 13 (计划于 2019 年 9 月发布)引入 break-with 连字符关键字。但是,最终决定放弃 break-with 关键字,改用新的关键字 yield,并重新预览 switch 表达式。新的 switch 表达式结构的最终定稿为引入模式匹配概念扫清道路,而这个概念已经讨论了近两年时间,终于落地了。

Goetz 和 Buckley 对带连字符的关键字的优缺点进行了评论:

出于简单的缘故而不使用 Java 的新功能是没有问题的;新的关键词是 Java 语言发展过程中经常遇到的问题和学习成本。

不再产生新的关键字也是一个方法,即完全停止 Java 语言的演进。尽管有些人认为这个主意不错,但是,因为缺乏可用关键词而这么做是愚蠢的。Java 还有很长的路要走,Java 开发人员对新的功能感到很兴奋,这些新功能使他们能够编写更富表现力和更可靠的代码。

Goetz 向 InfoQ 介绍了这些带连字符的关键字的提议:

InfoQ:对于 Java 语言中的带连字符的关键字,社区有什么反应?

Brian Goetz:正如你所预料的,已经影响了整个社区。有些人很高兴地看到,在如何最好地发展 Java 成为一种成熟语言方面,我们所付出的心血;其他人则抱怨道,我们把纠缠于研究细小的但没有多大实用意义的关键词问题,宁愿我们花时间去研究他们感兴趣的功能。

InfoQ:如果带连字符的关键字提案不被接受,那么,现有的这些关键词技术,“支配权”、“重载”、“变体”和“伪关键字 有多大可能会再用于扩展 Java 语言中的关键字集?

Goetz:我把它看作是个可选项,在里面添加了一个有趣且灵活的新选项。但是,在任何给定的情况下,其他选项可能仍然是更好的。我们不排除任何可能性,如提案不被接受。

InfoQ : 根据 JEP 354,提议的break-with带连字符的关键字被放弃了,改用 JDK 13 的新关键字yield。是什么导致决定不使用 Java 语言break-with关键字呢?

Goetz:break-with 关键词提出很早,但是,人们仍然觉得很麻烦且不明确。可选项上有带连字符的关键字,但是,这并不意味着我们必须都使用它。总的来说,人们发现 yield 更自然(当然,有些人不喜欢它,因为它提醒他们要从协程返回一个值)。结果表明,yield 是这个上下文的合理关键字。

InfoQ : Java 按照 6 个月的发布周期发展地越来越快了,那么,带连字符的关键字最终引入 Java 语言的可能性有多大?

Goetz:当我们需要的时候,它就会出现在可选项上。

InfoQ:关于带连字符的关键字,您希望我们的读者知道的最重要的信息是什么?

Goetz:我们非常重视 Java 语言兼容性,同时,我们努力保持 Java 代码的可读性,并在两者之间进行平衡。

资料来源:

InfoQ 就 Java 的模式匹配对 Brian Goetz 的采访录(InfoQ,2017 年 9 月 17 日)

Brian Goetz 发布的《 break-with 》(2019 年 1 月 17 日)

Alex Buckley 发布的《 Java 语言关键字管理》(2019 年 4 月 25 日)

原文链接:

Brian Goetz Speaks to InfoQ about Proposed Hyphenated Keywords in Java

评论

发布
用户头像
带连接符的关键字,感觉还是单个单词,言简意赅比较好吧。
2019 年 09 月 03 日 10:00
回复
没有更多了