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

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

我們建議變更語法,以傳達來自限制的版面配置差異。

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

拒絕原因

在草擬及發布這項提案時,大家一致認為應一次考慮所有語法變更,而非逐一變更 (另請參閱 RFC-0039)。我們也希望由一人擔任語法仲裁者,避免委員會設計的風險。

最終,這項提案由 RFC-0050 取代,該提案符合所尋求的兩項條件。

摘要

我們建議變更語法,以傳達來自限制的版面配置差異。

提振精神

版面配置與限制

快速:

  • 如果兩種型別的版面配置不同,就無法從一種型別軟轉換至另一種型別,反之亦然 (至少不容易)。
  • 版面配置說明位元組的配置方式,而非解讀方式。
  • 型別的限制是在編碼/解碼期間執行的驗證步驟。
  • 限制可能會演變,只要寫入者比讀取者受到更多限制,就能相容。

不同事物使用相同語法

版面配置不同的型別,以及版面配置相同 (但限制不同) 的型別,外觀看起來很相似。

相同版面配置:

  • vector<T>:6vector<T>:10
  • T?,其中 Tunionvectorstring
  • handle」、「handle<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 影響,進而提升人體工學。

說明文件和範例

須符合以下條件:

回溯相容性

這不具備來源層級的回溯相容性。