跳转至

FIDL design history

This page provides a starting point for navigating [RFCs] in the "FIDL" area. It organizes them in various ways and gives an updated status on each, bringing the reader up to speed with FIDL's history and current direction.

Previously, these design documents were called [FTPs] or FIDL Tuning Proposals. The FTP process was later [merged into][rfc-0017] the RFC process. Because of the way FTPs were renumbered as RFCs, RFC numbers do not imply chronology. However, each individual list on this page shows RFCs in chronological order: by submission date for FTP-turned-RFCs, and by review date for all later RFCs.

By theme

This section organizes FIDL RFCs by theme. Each RFC is listed once, under its primary theme, even if it touches on multiple themes.

Governance

  • [RFC-0018: FTP process: A modest proposal][rfc-0018]
  • [RFC-0049: FIDL tuning process evolution][rfc-0049]
  • [RFC-0017: The FTP Process is dead, long live the RFC Process!][rfc-0017]
  • [RFC-0131: Design principles of the FIDL wire format][rfc-0131]

Evolvability

  • [RFC-0047: Tables][rfc-0047]
  • (Rejected) [RFC-0063: OrdinalRange][rfc-0063]
  • [RFC-0058: Introduce a deprecated attribute][rfc-0058]
  • [RFC-0061: Extensible unions][rfc-0061]
  • [RFC-0020: Interface ordinal hashing][rfc-0020]
  • [RFC-0021: Soft transitions for methods add and remove][rfc-0021]
  • [RFC-0033: Handling of unknown fields and strictness][rfc-0033]
  • [RFC-0029: Increasing method ordinals][rfc-0029]
  • [RFC-0037: Transactional message header v3][rfc-0037]
  • [RFC-0024: Mandatory source compatibility][rfc-0024]
  • [RFC-0040: Identifier uniqueness][rfc-0040]
  • [RFC-0048: Explicit union ordinals][rfc-0048]
  • [RFC-0083: FIDL versioning][rfc-0083]
  • (Rejected) [RFC-0116: Wire format support for sparser FIDL tables][rfc-0116]
  • [RFC-0132: FIDL table size limit][rfc-0132]
  • [RFC-0138: Handling unknown interactions][rfc-0138]

Expressivity

  • [RFC-0019: Type aliases with using][rfc-0019]
  • [RFC-0022: Default values for struct members][rfc-0022]
  • [RFC-0066: Programmer advisory explicit defaults][rfc-0066]
  • (Rejected) [RFC-0065: No optional strings or vectors][rfc-0065]
  • (Rejected) [RFC-0064: Box\<Knox>][rfc-0064]
  • [RFC-0023: Compositional model for protocols][rfc-0023]
  • (Rejected) [RFC-0042: Non nullable types][rfc-0042]
  • [RFC-0041: Support for unifying services and devices][rfc-0041]
  • (Rejected) [RFC-0044: Extensible method arguments][rfc-0044]
  • [RFC-0054: Parameter attributes][rfc-0054]
  • [RFC-0052: Type aliasing and new types][rfc-0052]
  • [RFC-0137: Discard unknown data in FIDL][rfc-0137]

Syntax

  • (Rejected) [RFC-0036: Update to struct declarations][rfc-0036]
  • (Rejected) [RFC-0038: Separating layout from constraints][rfc-0038]
  • (Rejected) [RFC-0039: Types come second][rfc-0039]
  • [RFC-0050: Syntax revamp][rfc-0050]
  • [RFC-0086: Updates to RFC-0050: FIDL attributes syntax][rfc-0086]
  • (Rejected) [RFC-0088: Updates to RFC-0050: FIDL bits, enum, and constraints syntax][rfc-0088]
  • [RFC-0087: Updates to RFC-0050: FIDL method parameter syntax][rfc-0087]

Ergonomics

  • [RFC-0053: Epitaphs][rfc-0053]
  • [RFC-0056: Empty structs][rfc-0056]
  • [RFC-0060: Error handling][rfc-0060]
  • [RFC-0025: Bit flags][rfc-0025]
  • (Rejected) [RFC-0031: Typed epitaphs][rfc-0031]
  • [RFC-0057: Default no handles][rfc-0057]

Performance

  • (Rejected) [RFC-0045: Zero-size empty structs][rfc-0045]
  • (Rejected) [RFC-0026: Envelopes everywhere][rfc-0026]
  • [RFC-0027: You only pay for what you use][rfc-0027]
  • (Rejected) [RFC-0032: Efficient envelopes][rfc-0032]
  • (Rejected) [RFC-0035: Automatic flow tracing][rfc-0035]
  • [RFC-0113: Efficient envelopes][rfc-0113]
  • [RFC-0114: Inlining small values in FIDL envelopes][rfc-0114]
  • [RFC-0149: FIDL encode validation not mandatory][rfc-0149]

Safety & security

  • (Rejected) [RFC-0051: Safer structs for C++][rfc-0051]
  • (Rejected) [RFC-0062: Method impossible][rfc-0062]
  • (Rejected) [RFC-0034: Null terminate strings][rfc-0034]
  • [RFC-0028: Handle rights][rfc-0028]

Tooling

  • [RFC-0076: FIDL API summaries][rfc-0076]
  • [RFC-0097: FIDL Toolchain][rfc-0097]
  • [RFC-0120: Standalone use of the FIDL wire format][rfc-0120]

Documentation

  • [RFC-0055: Documentation comments][rfc-0055]
  • [RFC-0043: Documentation comment format][rfc-0043]

Simplify design space

  • [RFC-0030: FIDL is little endian][rfc-0030]
  • [RFC-0059: Reserved bits in vector, string, and array count fields][rfc-0059]

By language feature

This section lists RFCs that introduced new feature that are easily visible in the FIDL language. It only includes current features, not obsolete ones.

Feature RFC Note
struct defaults [RFC-0022] Default values for struct members
table [RFC-0047] Forward and backward compatible data type
/// [RFC-0055] Documentation comments
struct Empty {}; [RFC-0056] Empty structs
error [RFC-0060] Method error result syntax
union [RFC-0061] Initially called xunion, replaced the old static unions
@selector [RFC-0020] Override method hashing with an explicit selector
@transitional [RFC-0021] Attribute for soft transitioning method addition/removal
compose [RFC-0023] Renamed interface to protocol, added the compose feature
bits [RFC-0025] Bit flags types
strict, flexible [RFC-0033] Strict and flexible types
handle rights [RFC-0028] Annotate required or excluded handle rights
service [RFC-0041] Services are collection of protocols
alias, type [RFC-0052] Replaced using aliases with alias and type
resource [RFC-0057] Value and resource types
anonymous layouts [RFC-0050] Inline type definitions, named contextually or with @generated_name
@available [RFC-0083] Version annotations
Method(table { ... }) [RFC-0087] Tables and unions as top-level request/response types
open, closed, ajar [RFC-0138] Open and closed interactions

Current status

This section gives the current status of all FIDL RFCs.

Legend:

Status Meaning
Unpublished Never made public nor formally reviewed
Withdrawn Made public, but never formally reviewed
In review Made public, review pending
Implemented Accepted, implemented, still accurate
Partially implemented Accepted and partially implemented, no plans to finish
Implementation in progress Accepted, implementation in progress
Amended Accepted, still mostly accurate, but amended by a later RFC
Superseded Accepted but no longer accurate, superseded by a later RFC
Rejected Formally rejected
Rejected; Superseded Formally rejected, then superseded by a later RFC
RFC Title Status
[RFC-0018] FTP process: A modest proposal Superseded by [RFC-0017]
[RFC-0019] Type aliases with using Superseded by [RFC-0052]
[RFC-0022] Default values for struct members Partially implemented: only in HLCPP, Dart
[RFC-0051] Safer structs for C++ Rejected
[RFC-0062] Method impossible Rejected
[RFC-0053] Epitaphs Implemented
[RFC-0066] Programmer advisory explicit defaults Implemented
[RFC-0047] Tables Amended by [RFC-0116], [RFC-0132]
[RFC-0055] Documentation comments Amended by [RFC-0043]
[RFC-0063] OrdinalRange Rejected; Superseded by [RFC-0020]
FIDL in FIDL Unpublished; Protobuf can do this
[RFC-0056] Empty structs Implemented
[RFC-0058] Introduce a deprecated attribute Superseded by [RFC-0083]
[RFC-0060] Error handling Implemented
[RFC-0061] Extensible unions Implemented
[RFC-0065] No optional strings or vectors Rejected
[RFC-0064] Box\<Knox> Rejected; see also "FIDL large message support"
Sequences Unpublished; earlier version of "Streams"
Streams Unpublished; see also [measure-tape] (a pragmatic solution)
[RFC-0020] Interface ordinal hashing Implemented
[RFC-0021] Soft transitions for methods add and remove Implemented
[RFC-0023] Compositional model for protocols Implemented
[RFC-0045] Zero-size empty structs Rejected
[RFC-0025] Bit flags Implemented
[RFC-0026] Envelopes everywhere Rejected
[RFC-0027] You only pay for what you use Implemented
[RFC-0030] FIDL is little endian Implemented
[RFC-0031] Typed epitaphs Rejected
[RFC-0032] Efficient envelopes Rejected; Superseded by [RFC-0113]
[RFC-0033] Handling of unknown fields and strictness Amended by [RFC-0137]
[RFC-0034] Null terminate strings Rejected
[RFC-0029] Increasing method ordinals Superseded by [RFC-0037]
[RFC-0035] Automatic flow tracing Rejected
[RFC-0036] Update to struct declarations Rejected
[RFC-0037] Transactional message header v3 Implemented
[RFC-0038] Separating layout from constraints Rejected; Superseded by [RFC-0050]
[RFC-0039] Types come second Rejected; Superseded by [RFC-0050]
[RFC-0028] Handle rights Implemented
[RFC-0042] Non nullable types Rejected (April Fools)
[RFC-0024] Mandatory source compatibility Implemented; see also [source_compatibility]
[RFC-0040] Identifier uniqueness Implemented (rejected at first, later accepted)
[RFC-0041] Support for unifying services and devices Partially implemented: only in C++, Rust
[RFC-0044] Extensible method arguments Rejected; Superseded by [RFC-0087]
[RFC-0043] Documentation comment format Implemented
Versioning Unpublished; Superseded by [RFC-0083]
Required table fields Unpublished
[RFC-0048] Explicit union ordinals Implemented
[RFC-0049] FIDL tuning process evolution Superseded by [RFC-0017]
Unified view of optionality Unpublished
Iterators Unpublished; see also [measure-tape] (a pragmatic solution)
[RFC-0054] Parameter attributes Superseded by [RFC-0050]
[RFC-0052] Type aliasing and new types Implementation in progress
Restrict non-numeric floating point values Unpublished
Constant expressions Unpublished
[RFC-0057] Default no handles Implemented
[RFC-0050] Syntax revamp Amended by [RFC-0086], [RFC-0087], [RFC-0088]
FIDL text format Unpublished
[RFC-0059] Reserved bits in vector, string, and array count fields Implemented; reserved bits no longer used by LLCPP
[RFC-0017] The FTP Process is dead, long live the RFC Process! Implemented
FIDL Large message support [Withdrawn][large-message-cl]
[RFC-0076] FIDL API summaries Implemented
[RFC-0083] FIDL versioning Implementation in progress
[RFC-0086] Updates to RFC-0050: FIDL attributes syntax Implemented
[RFC-0088] Updates to RFC-0050: FIDL bits, enum, and constraints syntax Rejected
[RFC-0087] Updates to RFC-0050: FIDL method parameter syntax Implementation in progress
[RFC-0097] FIDL Toolchain Implementation in progress
[RFC-0113] Efficient envelopes Implemented
[RFC-0114] Inlining small values in FIDL envelopes Implemented
[RFC-0116] Wire format support for sparser FIDL tables Rejected
[RFC-0120] Standalone use of the FIDL wire format Implementation in progress
[RFC-0131] Design principles of the FIDL wire format Implemented
[RFC-0132] FIDL table size limit Implemented
[RFC-0137] Discard unknown data in FIDL Implementation in progress
[RFC-0138] Handling unknown interactions Implementation in progress
[RFC-0149] FIDL encode validation not mandatory Implemented
Remove support for FIDL struct defaults In review
Terminal events In review

rfcs /contribute/governance/deprecated-ftp-process.md

measure-tapesource_compatibility[large-message-cl]: https://fuchsia-review.googlesource.com/c/fuchsia/+/470640 rfc-0017rfc-0018rfc-0019rfc-0020rfc-0021rfc-0022rfc-0023rfc-0024rfc-0025rfc-0026rfc-0027rfc-0028rfc-0029rfc-0030rfc-0031rfc-0032rfc-0033rfc-0034rfc-0035rfc-0036rfc-0037rfc-0038rfc-0039rfc-0040rfc-0041rfc-0042rfc-0043rfc-0044rfc-0045rfc-0047rfc-0048rfc-0049rfc-0050rfc-0051rfc-0052rfc-0053rfc-0054rfc-0055rfc-0056rfc-0057rfc-0058rfc-0059rfc-0060rfc-0061rfc-0062rfc-0063rfc-0064rfc-0065rfc-0066rfc-0076rfc-0083rfc-0086rfc-0087rfc-0097rfc-0113rfc-0114rfc-0116rfc-0120rfc-0131rfc-0132rfc-0137rfc-0138rfc-0149


最后更新: 2022 年 12 月 31 日(Saturday) 21:06 CST