RFC-0019:使用 evolution = uint64; | |
---|---|
状态 | 已接受 |
区域 |
|
说明 | 添加了一种机制,用于为基元类型提供更具描述性的名称。移除了状态作为语言内置功能的属性。引入 zx 库来包含 |
作者 | |
提交日期(年-月-日) | 2018-07-17 |
审核日期(年-月-日) | 2018-08-03 |
摘要
添加了一种机制,用于为基元类型提供更具描述性的名称。
移除了作为该语言内置功能的状态。引入 zx 库来包含 <zircon/types.h>
中的基元类型。
与其他 RFC 的关系
此 RFC 已被以下 RFC 取代:
设计初衷
通常,开发者希望为基元类型分配更具描述性的名称。例如,status
是 int32
的更具描述性的名称,但 status
是内置于该语言中的,而其他类型无法以相同的方式使用。
设计
此提案仅影响 FIDL 源语言。
- 扩展
using
关键字,以便为基元类型分配描述性名称。具体而言,请将以下生成式添加到 FIDL 语法中:
using-list = ( using | using-declaration )* ;
using-declaration = "using" , IDENTIFIER , "=" , primitive-type , ";" ;
从该语言中移除了
status
基元类型。现在,status
基元类型可以使用该语言本身进行定义,而不再是内置功能。移除了
status
预留字词。现在,我们可以在该语言中定义名称,因此无需再预留status
这个字词。添加一个zx
库,其中包含 Zircon 系统接口定义的原始类型的声明。理想情况下,此库应从包含此信息的未来 syscalls.abigen 生成。例如:
library zx;
using status = int32;
using time = uint64;
using duration = uint64;
[...]
请注意,这些声明必须显示在 using 列表中,并且必须直接引用基元类型。这种方法可避免编译器中的复杂性,因为其使用可以立即转换为底层基元类型。
此外,请注意,系统未针对任何目标语言的生成代码提出任何更改建议。这些类型使用底层基元类型在目标语言中表示。
文档和示例
用法示例
1: AdvanceTime(zx.duration duration) -> (zx.status status);
向后兼容性
此更改对 FIDL 源语言而言是不向后兼容的更改,因为它会移除 status
基元类型。不过,迁移 status
的现有客户端非常简单,因为它们可以直接改用 zx.status
。
性能
建议的更改不会影响效果。
安全
建议的更改对安全性没有影响。
测试
我们将在 Zircon 的 fidl-test 套件中测试此功能,方法是添加一个使用 zx
库中的每种类型的 FIDL 文件。
缺点、替代方案和未知情况
此提案可在 FIDL 前端中轻松实现,并且无需对特定于语言的后端进行任何更改。
另一种方法是不要解决此问题,继续直接使用基元类型。
在先技术和参考文档
这种功能在编程语言中非常常见。该语法是从 C++ 中借鉴过来的。