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>的所有基本类型。

动机

开发人员通常希望为基本类型分配更多描述性名称。 例如,statusint32的更具描述性的名称,但status是内置于语言中的,而其他的类型不能以此的方式使用。

设计

此提案仅影响FIDL源语言。

  1. 扩展using关键字,以便能够为基本类型指定描述性名称。 具体来说,将以下内容添加到FIDL的语法中:
  1. using-list = ( using | using-declaration )* ;
  2. using-declaration = "using" , IDENTIFIER , "=" , primitive-type , ";" ;
  1. 从语言中移除status基本类型。 更改后可以使用语言本身来定义status类型,但不是语言内置的功能。
  1. 移除status保留关键字。 现在我们不再需要保留”status”这个词,因为我们可以通过语言定义名称。 添加一个zx库,其中包含Zircon系统接口定义的基本类型的声明。 理想情况下,此后zx库将从包含此信息的syscalls.abigen中生成。 例如: ``` library zx;

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

  1. <!-- Notice that these declarations must appear in the using-list and must
  2. refer directly to primitive types. This approach avoids complexity in
  3. the compiler because their use can be immediately translated into the
  4. underlying primitive type. -->
  5. 请注意,这些声明必须出现在using-list中,并且必须直接引用基本类型。
  6. 这种方式避免了编译器的复杂性,因为它们声明的使用可以立即转换为底层的基本类型。
  7. <!--
  8. Further, notice that there are no proposed changes to the generated
  9. code in any target language. These types are represented in the
  10. target languages using the underlying primitive types. -->
  11. 此外,请注意,没有提议修改针对任何目标语言的生成代码,因为这些类型通过底层的基本类型在目标语言中得以表示。
  12. <!-- ## Documentation and Examples -->
  13. ## 文档和示例
  14. <!-- Example usage -->
  15. 用法示例
  1. 1: AdvanceTime(zx.duration duration) -> (zx.status status);

```

向后兼容性

此修改是对FIDL源语言的非向后兼容性更改,因为它移除了status基本类型。 但是,迁移status的现有客户是很容易的,因为他们可以只需修改为使用zx.status

性能

修改提议对性能没有影响。

安全性

修改提议对安全性没有影响。

测试

该功能将通过在Zircon的fidl-test测试集里添加FIDL文件进行测试,该文件使用zx库中的所有类型。

缺点,替代方案和未知事件

此提议可以直接在FIDL前端中实现,并且不需要更改特定于绑定语言的后端。

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

现有技术和参考文献

此功能在编程语言中是非常常见的。 本提案提出的语法零散地借用于C++语言。