| RFC-0038:將版面配置與限制條件分開 | |
|---|---|
| 狀態 | 已遭拒 |
| 區域 |
|
| 說明 | 我們建議變更語法,以傳達來自限制的版面配置差異。 |
| 作者 | |
| 提交日期 (年-月-日) | 2019-03-07 |
拒絕原因
在草擬及發布這項提案時,大家一致認為應一次考慮所有語法變更,而非逐一變更 (另請參閱 RFC-0039)。我們也希望由一人擔任語法仲裁者,避免委員會設計的風險。
最終,這項提案由 RFC-0050 取代,該提案符合所尋求的兩項條件。
摘要
我們建議變更語法,以傳達來自限制的版面配置差異。
提振精神
版面配置與限制
快速:
- 如果兩種型別的版面配置不同,就無法從一種型別軟轉換至另一種型別,反之亦然 (至少不容易)。
- 版面配置說明位元組的配置方式,而非解讀方式。
- 型別的限制是在編碼/解碼期間執行的驗證步驟。
- 限制可能會演變,只要寫入者比讀取者受到更多限制,就能相容。
不同事物使用相同語法
版面配置不同的型別,以及版面配置相同 (但限制不同) 的型別,外觀看起來很相似。
相同版面配置:
vector<T>:6或vector<T>:10T?,其中T是union、vector或string- 「
handle」、「handle<vmo>」或「handle<channel>」
版面配置不同:
array<T>:6對array<T>:10S?,其中S是struct
設計
語法對齊
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 影響,進而提升人體工學。
說明文件和範例
須符合以下條件:
回溯相容性
這不具備來源層級的回溯相容性。