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
评论 1 条评论