RFC-0038:將版面配置與限制分開

RFC-0038:將版面配置與限制區隔
狀態已遭拒
區域
  • FIDL
說明

我們提議變更語法,來區分版面配置和限制之間的差異。

作者
提交日期 (年/月)2019-03-07

拒絕原因

本提案草擬草案並進行社會上課時,強烈的共識是一次考慮所有語法變更,而不是一次考慮一個項目 (另請參閱 RFC-0039)。我們也希望由一人擔任語法仲裁者,而不是根據委員會設計風險。

此提案最終是由 RFC-0050 取代,後者同時符合這兩項條件。

摘要

我們提議變更語法,以傳達版面配置和限制之間的差異。

提振精神

版面配置與限制

快速:

  • 如果兩種類型的版面配置不同,則無法在兩個類型之間軟性轉換,反之亦然 (不很容易)。
  • 版面配置說明位元組的配置方式和解譯方式。
  • 特定類型的限制是在編碼/解碼期間執行的驗證步驟。
  • 限制可能會改變,只要寫入者比讀取者更嚴格,一切就會相容。

不同事項的語法相同

不同的版面配置和版面配置都相同 (但限制不同) 的類型看起來會像這樣。

相同的版面配置:

  • vector<T>:6,或 vector<T>:10
  • T?,其中 Tunionvectorstring
  • handlehandle<vmo>handle<channel>

不同的版面配置:

  • array<T>:6array<T>:10
  • S?,其中 Sstruct

設計

與語法保持一致

layout:constraint

就類型而言,也就是控製版面配置的任何項目都位於冒號之前,任何控制限制的項目皆位於冒號後面。

建議的變更:

    array<T>:N    becomes            array<T, N>

    S?            becomes            box<S>:nullable       (S is a struct)

    T?            becomes            T:nullable            (T is a vector, or union)

    string        is an alias for    vector<uint8>:utf8

    handle<K>     becomes            handle:K

注意:

  • 並非所有限制對所有類型都有意義,例如無法將 struct 標示為可為空值。
  • 並非所有內容都能裝箱,一開始就只有結構體 (目標是為了變更語法,而不增加更多可選用性的方式)。

人體工學

本提案透過語法將 ABI 的影響傳達給開發人員,藉此改善人體工學。

說明文件與範例

至少:

回溯相容性

與來源層級回溯不相容。