gpt4 book ai didi

java - Java 10 中的 "restricted keyword"和 "reserved type name"之间的概念区别是什么?

转载 作者:IT老高 更新时间:2023-10-28 20:54:33 26 4
gpt4 key购买 nike

Java 10 带有新的局部变量类型推断。标记 var 可用于减少声明变量时所需的样板文件。例如

var s = "hello";

根据What type of token is exactly "var" in Java 10?这个新标记不是“关键字”,而是“保留类型名称”。因此,“var”一词仍然可以用作变量名,以保持与现有代码的向后兼容性。

var var = "you can do this";

当 Java 9 中引入“模块”功能时,这个新标记的类型(连同它的 9 个其他相关标记)被称为“受限关键字”。也就是说,它们仅在某些特定上下文限制下才被视为关键字。例如您仍然可以拥有称为模块的变量。

当新的语言特性以不破坏现有用户定义符号的方式添加到 C++ 时,它们被称为“上下文敏感关键字”。

Java 10 中新的“保留类型名称”var 标记与“上下文敏感关键字”或“受限关键字”之间是否存在概念差异。也就是说,新的 var 标记在某些特定上下文限制下真的只是一个关键字。如果是这样,为什么不简单地将其添加到“受限关键字”列表中?

JLS 的当前草稿版本进一步增加了我的困惑。说:

The character sequence var is generally treated as an identifier, but in certain special cases acts as if it were a keyword instead.

该定义听起来确实像是“受限关键字”。

最佳答案

您引用的部分(3.8:关键字)的下一句是:

A further ten character sequences are restricted keywords: open, module, requires, transitive, exports, opens, to, uses, provides, and with.

请注意,var 不在此列表中。本节中对 var 的提及正是为了清楚地表明,虽然在某些情况下它可能作用 像一个受限关键字,而你听起来可能是这样在您对规范的非正式阅读中,事实并非如此。

上下文相关的关键字是我们可以使用的工具之一,用于以兼容的方式发展语言;保留标识符是另一个。在这种特殊情况下,任何一种都可以应用,最后,后一种工具被认为(出于规范和编译器实现的目的)更可取。

与大多数编译器实现一样,该规范将词法、句法和类型问题分开。关键字主要在词法分析器和解析器生成级别处理;保留类型名称会在编译过程的后期、类型分析期间进行检查,并且可以与非保留名称共享解析器产生的结果。

从既不是规范作者也不是编译器实现者的开发人员的角度来看,区别主要是理论上的;任何一种路径都可以达到预期的效果。

关于java - Java 10 中的 "restricted keyword"和 "reserved type name"之间的概念区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com