FIDL Tuning Proposal 002
- 状态:已实现
- 作者:abarth@google.com
- 评审者:kulakowski@google.com
- 原始日期:2018-07-17
- 最后更新:2018-07-17
- Bug追踪:FIDL-253
using evolution = uint64;
摘要
添加一种机制,为基本类型提供更具描述性的名称。
移除作为语言的内置功能的status
类型,并引入一个zx库包含来自<zircon/types.h>
的所有基本类型。
动机
开发人员通常希望为基本类型分配更多描述性名称。
例如,status
是int32
的更具描述性的名称,但status
是内置于语言中的,而其他的类型不能以此的方式使用。
设计
此提案仅影响FIDL源语言。
- 扩展
using
关键字,以便能够为基本类型指定描述性名称。 具体来说,将以下内容添加到FIDL的语法中:
using-list = ( using | using-declaration )* ;
using-declaration = "using" , IDENTIFIER , "=" , primitive-type , ";" ;
- 从语言中移除
status
基本类型。 更改后可以使用语言本身来定义status
类型,但不是语言内置的功能。
- 移除
status
保留关键字。 现在我们不再需要保留”status”这个词,因为我们可以通过语言定义名称。 添加一个zx
库,其中包含Zircon系统接口定义的基本类型的声明。 理想情况下,此后zx
库将从包含此信息的syscalls.abigen中生成。 例如: ``` library zx;
using status = int32; using time = uint64; using duration = uint64; […]
<!-- Notice that these declarations must appear in the using-list and must
refer directly to primitive types. This approach avoids complexity in
the compiler because their use can be immediately translated into the
underlying primitive type. -->
请注意,这些声明必须出现在using-list中,并且必须直接引用基本类型。
这种方式避免了编译器的复杂性,因为它们声明的使用可以立即转换为底层的基本类型。
<!--
Further, notice that there are no proposed changes to the generated
code in any target language. These types are represented in the
target languages using the underlying primitive types. -->
此外,请注意,没有提议修改针对任何目标语言的生成代码,因为这些类型通过底层的基本类型在目标语言中得以表示。
<!-- ## Documentation and Examples -->
## 文档和示例
<!-- Example usage -->
用法示例
1: AdvanceTime(zx.duration duration) -> (zx.status status);
```
向后兼容性
此修改是对FIDL源语言的非向后兼容性更改,因为它移除了status
基本类型。
但是,迁移status
的现有客户是很容易的,因为他们可以只需修改为使用zx.status
。
性能
修改提议对性能没有影响。
安全性
修改提议对安全性没有影响。
测试
该功能将通过在Zircon的fidl-test测试集里添加FIDL文件进行测试,该文件使用zx
库中的所有类型。
缺点,替代方案和未知事件
此提议可以直接在FIDL前端中实现,并且不需要更改特定于绑定语言的后端。
另一种方法是不解决该问题并继续直接使用基本类型。
现有技术和参考文献
此功能在编程语言中是非常常见的。 本提案提出的语法零散地借用于C++语言。