RFC-0039:类型排在第二 | |
---|---|
状态 | 已拒绝 |
领域 |
|
说明 | 我们提议允许对结构体、xunion 和表进行内嵌声明;反转字段名称(或参数和返回名称)在类型中的显示顺序,特别是让类型显示在名称之后。 |
作者 | |
提交日期(年-月-日) | 2019-03-07 |
“你会想要爱上它”
遭拒原因
此提案在起草并传达给社会后就得到了广泛认可, 一次考虑所有语法更改,而不是一次更改一项(另请参阅 RFC-0038)。 我们还希望有一个人担任语法仲裁者,而不是承担设计风险 由委员会决定。
此提案最终被 符合的 RFC-0050 这两种情况。
摘要
我们建议:
- 允许以内嵌方式声明结构体、联合和表;
- 反转字段名称(或参数/返回值)的显示顺序: 与类型相关,具体来说是将类型显示在名称之后。
(我们没有引入匿名声明,因为很可能需要 改进了绑定支持,以确保良好的工效学设计。)
设计初衷
快速:
- 我们开始看到更多模式,其中各种声明组合
描述“一条概念性消息”是日常安排。例如:
<ph type="x-smartling-placeholder">
- </ph>
- 容器结构体,其最后一个字段是要在 扩展程序的大门
- 容器联合,其中变体是具有灵活性的表。
- 容器表,其中字段按结构体分组,序数松散 与“版本号”一致。
- 此外,支持空结构体、联合和表 (通过布局)构建代数数据类型支持的低层级内容 立场,而不是绑定)。
- 所有这些用例都在促使我们允许使用内联声明。
- 使用内联声明,首先可以更轻松地读取字段名称,然后 类型描述,可以跨多个行。请参见下面的示例。
设计
请参见以下示例:
简单的结构体或表:
struct Name { field int32; }; table Name { 1: field int32; };
协议:
protocol Name { Method(arg int32) -> (ret int32); };
带扩展名的结构体:
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 的含义传达给开发者,可改善工效学设计 。
文档和示例
至少:
向后兼容性
这并非源代码级向后兼容。