RFC-0039:类型排在第二位 | |
---|---|
状态 | 已拒绝 |
领域 |
|
说明 | 我们提议允许结构体、xunion 和表的内嵌声明;反转字段名称(或参数和返回名称)的显示顺序,特别是让类型显示在名称后面。 |
作者 |
|
提交日期(年-月-日) | 2019-03-07 |
“您会爱上它的”
遭拒的理由
在拟定此方案并加以社交时,人们达成一致意见,即需要一次更改所有语法,而不是一次更改一个(另请参阅 RFC-0038)。 我们还希望由一个人来主导语法规则,而不是由委员会来冒险设计。
最终,此方案已被 RFC-0050 取代,而 RFC-0050 同时满足了这两种情况。
总结
我们提议:
- 允许结构体、联合和表的内嵌声明;
- 按类型切换字段名称(或参数/返回名称)的显示顺序,特别是让类型显示在名称后面。
(我们不再引入匿名声明,因为我们可能需要改进的绑定支持,以确保工效学设计良好。)
设计初衷
迅速:
- 我们开始看到更多模式,在这些模式中,结合使用各种声明来描述“一条概念性消息”是一种常规模式。例如:
- 容器结构体,其最后一个字段是一个表(最初为空),为扩展程序打开大门。
- 容器联合,其中变体是表,以便具有灵活性。
- 容器表,其中字段按结构体分组,序数与“版本号”松散匹配。
- 此外,对空结构体、联合和表的支持提供了用于构建代数数据类型支持的低级部分(从布局的角度,而不是绑定)。
- 所有这些用例都在推动我们允许使用内嵌声明。
- 使用内嵌声明,更容易先读取字段名称,然后是类型说明(可以分成多行)。请参见下面的示例。
设计
请参见以下示例:
简单的结构体或表:
struct Name { field int32; }; table Name { 1: field int32; };
协议:
protocol Name { Method(arg int32) -> (ret int32); };
带有扩展的 Struct:
struct Name { field1 T1; field2 T2; ...; ext table NameExt {}; };
联合变体:
union Name { variant1 table NameVariant1 { ... }; variant2 table NameVariant2 { ... }; ... };
按版本对字段分组:
table Name { 1: v1 struct NameGroupV1 { ... }; 2: v2 struct NameGroupV2 { ... }; ... };
注意:
- 在限定范围方面,虽然我们认为所有声明名称都是顶级名称(从而对每个库强制执行唯一性),但我们不允许引用内联声明,也就是说,只能使用一次。
工效学设计
此方案通过语法向开发者传达 ABI 影响,从而改善工效学设计。
文档和示例
至少:
向后兼容性
这不是源代码级别的向后兼容性。