RFC-0019:使用进化 = uint64;

RFC-0019:Using evolution = uint64;
状态已接受
领域
  • FIDL
说明

添加了一种机制,以便为基元类型提供更具描述性的名称。移除了作为语言的内置功能的状态。引入 zx 库,以包含 .

作者
提交日期(年-月-日)2018-07-17
审核日期(年-月-日)2018-08-03

总结

添加了一种机制,以便为基元类型提供更具描述性的名称。移除了作为语言的内置功能的状态。引入了 zx 库,以包含 <zircon/types.h> 中的基元类型。

与其他 RFC 的关系

此 RFC 已被取代:

设计初衷

开发者通常希望为基元类型指定更具描述性的名称。例如,statusint32 的更具描述性的名称,但 status 内置于语言中,不能以相同的方式使用其他类型的类型。

设计

此方案仅影响 FIDL 源语言。

  1. 扩展 using 关键字,以便能够为基元类型指定描述性名称。具体而言,请将以下生成式添加到 FIDL 语法中:
using-list = ( using | using-declaration )* ;
using-declaration = "using" , IDENTIFIER ,  "=" , primitive-type , ";" ;
  1. 从语言中移除了 status 基元类型。现在,可以使用语言本身定义 status 基元类型,而不需要成为内置功能。

  2. 请移除 status 保留字。现在,我们可以使用语言定义名称,因此不再需要保留 status 一词。添加一个 zx 库,其中包含由 Zircon 系统接口定义的基本类型的声明。理想情况下,此库将由包含此信息的未来 syscalls.abigen 生成。例如:

library zx;

using status = int32;
using time = uint64;
using duration = uint64;
[...]

请注意,这些声明必须出现在 using-list 中,并且必须直接引用基元类型。这种方法可以避免编译器的复杂性,因为它们的使用可以立即转换为底层基元类型。

此外,请注意,没有提议对任何目标语言生成的代码进行更改。这些类型使用基础基元类型在目标语言中表示。

文档和示例

用法示例

    1: AdvanceTime(zx.duration duration) -> (zx.status status);

向后兼容性

这项变更是对 FIDL 源语言所做的不向后兼容更改,因为它移除了 status 基元类型。但是,迁移 status 的现有客户端非常简单,因为它们可以直接使用 zx.status

性能

建议的更改对效果没有影响。

安全性

建议的更改对安全性没有影响。

测试

系统将在 Zircon 的 fidl 测试套件中测试该功能,方法是添加一个 FIDL 文件,使用 zx 库中的每种类型。

缺点、替代方案和未知情况

该方案直接在 FIDL 前端实现,无需更改特定语言的后端。

另一种方法是不解决问题,继续直接使用基元类型。

早期技术和参考资料

此功能在编程语言中非常常见。其语法从 C++ 中大致借用。