RFC-0019:使用进化 = uint64;

RFC-0019:使用 evolution = uint64;
状态已接受
区域
  • FIDL
说明

添加一种机制,为原始类型提供更具描述性的名称。移除作为语言内置功能的“状态”。引入一个 zx 库,其中包含 中的原始类型。

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

摘要

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

与其他 RFC 的关系

此 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;
[...]

请注意,这些声明必须显示在使用列表中,并且必须直接引用原始类型。 这种方法避免了编译器中的复杂性,因为它们的使用可以立即转换为底层原始类型。

此外,请注意,在任何目标语言中,生成的代码都没有任何拟议的更改。 这些类型在目标语言中使用底层原始类型表示。

文档和示例

用法示例

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

向后兼容性

此更改是对 FIDL 源语言的非向后兼容更改,因为它移除了 status 原始类型。 不过,迁移 status 的现有客户端非常简单,因为它们只需改用 zx.status 即可。

性能

拟议的更改不会对性能产生任何影响。

安全

拟议的更改不会对安全性产生任何影响。

测试

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

缺点、替代方案和未知事项

此提案在 FIDL 前端中实现起来非常简单,并且不需要对特定于语言的后端进行任何更改。

另一种方法是不解决此问题,而是继续直接使用原始类型。

在先技术和参考文档

此功能在编程语言中非常常见。 语法大致借鉴了 C++。