RFC-0038:將版面配置與限制區隔 | |
---|---|
狀態 | 已遭拒 |
區域 |
|
說明 | 我們提議變更語法,來區分版面配置和限制之間的差異。 |
作者 | |
提交日期 (年/月) | 2019-03-07 |
拒絕原因
本提案草擬草案並進行社會上課時,強烈的共識是一次考慮所有語法變更,而不是一次考慮一個項目 (另請參閱 RFC-0039)。我們也希望由一人擔任語法仲裁者,而不是根據委員會設計風險。
此提案最終是由 RFC-0050 取代,後者同時符合這兩項條件。
摘要
我們提議變更語法,以傳達版面配置和限制之間的差異。
提振精神
版面配置與限制
快速:
- 如果兩種類型的版面配置不同,則無法在兩個類型之間軟性轉換,反之亦然 (不很容易)。
- 版面配置說明位元組的配置方式和解譯方式。
- 特定類型的限制是在編碼/解碼期間執行的驗證步驟。
- 限制可能會改變,只要寫入者比讀取者更嚴格,一切就會相容。
不同事項的語法相同
不同的版面配置和版面配置都相同 (但限制不同) 的類型看起來會像這樣。
相同的版面配置:
vector<T>:6
,或vector<T>:10
T?
,其中T
為union
、vector
或string
handle
、handle<vmo>
或handle<channel>
不同的版面配置:
array<T>:6
對array<T>:10
S?
,其中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 的影響傳達給開發人員,藉此改善人體工學。
說明文件與範例
至少:
回溯相容性
與來源層級回溯不相容。