「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

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

2019 年 9 月 03 日

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 年 9 月 03 日 08:524464
用户头像

发布了 199 篇内容, 共 68.5 次阅读, 收获喜欢 278 次。

关注

评论 1 条评论

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

Linux高级编程常用的系统调用函数汇总

哒宰的自我修养

Linux 线程 网络编程 进程 MySQL数据库

一场关于FLV是否要支持HEVC的争论

wangwei1237

技术文化

追风人与笃行者:云手机的2020风云录

脑极体

面试官问:你讲讲分布式事务问题的几种方案?

Crud的程序员

分布式

23张图!万字详解「链表」,从小白到大佬!

王磊

Java 数据结构与算法

JDK8中的新时间API:Duration Period和ChronoUnit介绍

程序那些事

java8 jdk8 新特性 程序那些事 时间API

高防服务器是什么?

德胜网络-阳

第一届“多模态自然语言处理研讨会”精彩回顾(免费获取PPT)

京东科技开发者

人工智能 自然语言处理

刷了LeetCode的链表专题,我发现了一个秘密!

Simon郎

Java 链表 面试数据结构与算法

TensorFlow 篇 | TensorFlow 数据输入格式之 TFRecord

Alex

tensorflow keras dataset tfrecord

网易云音乐基于 Flink + Kafka 的实时数仓建设实践

Apache Flink

flink

如何将MySQL查询优化到极致?

冰河

MySQL sql 性能优化 查询优化 查询

C++中的vector和Java中的ArrayList的构造函数的区别

jiangling500

Java c++ ArrayList vector

面经手册 · 第16篇《码农会锁,ReentrantLock之公平锁讲解和实现》

小傅哥

Java 面试 小傅哥 ReentrantLock 公平锁

5G时代的到来对直播的影响

anyRTC开发者

5G 音视频 WebRTC 直播 RTC

国内外互联网大厂工程师联合推荐:程序员三门课+151个建议

小Q

Java 学习 编程 程序员 开发

看完这篇你还能不懂C语言/C++内存管理?

C语言与CPP编程

c c++ C语言 内存管理 编程开发

redis的stream类型命令详解

LLLibra146

redis stream 消息队列

设置Vmware中的Ubuntu为桥接模式

jiangling500

ubuntu vmware 桥接

程序人急速变富指南(一)

陆陆通通

程序员 职业 财富 认知 眼界

开源技术够用了么?我的 NAS 选型与搭建过程

LeanCloud

开源 NAS

「排序算法」图解双轴快排

bigsai

排序算法 快速排序 双轴快排

Redis-缓存雪崩,缓存击穿,缓存穿透

topsion

redis

vivo 云服务海量数据存储架构演进与实践

vivo互联网技术

数据库 架构 云服务 数据存储

推进AI融合 2020 LF AI & DATA DAY(AI开源日)即将召开

Geek_459987

甲方日常 44

句子

工作 随笔杂谈 日常

英特尔独显终于来了!锐炬®Xe MAX为非凡S3x带来设计师级创作体验

新闻科技资讯

深度解读智能推荐系统搭建之路 | 会展云技术揭秘

京东科技开发者

人工智能 推荐系统

如何在面试中解释关键机器学习算法

计算机与AI

学习 数据科学

CloudQuery V1.2.0 版本发布

CloudQuery社区

数据库 sql 编辑器 工具软件

央视呼吁电商双十一少一些套路:应该严打网店套路营销

石头IT视角

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