RFC-0066:程式設計師明確預設值 | |
---|---|
狀態 | 已接受 |
領域 |
|
說明 | FIDL 規格不會說明原始和列舉結構體欄位是否具有預設值。這項調整建議我們明確記錄他們不會這麼做。 |
作者 | |
提交日期 (年-月-日) | 2018-07-20 |
審查日期 (年-月-日) | 2019-01-14 |
摘要
FIDL 規格無法說明原始和列舉結構 欄位都有預設值 這項調整建議我們明確記錄他們不會這麼做。
提振精神
在某些語言中,要求初始化相當困難,而且不可能 其他東西。 這項提案讓我們有機會將大門開放給最小公分母,但 提供政策,適用於後續程式語言。
不清楚某些型別結果的結構體中的預設值不夠清楚 某些異議。 語言繫結在處理隱含和明確設定方面不一致 預設值。 可為空值類型預設為空值,以及陣列和向量的預設值 但排除其他儲存格 C++ 繫結預設原始型別為 false、0 或 0.0,而 Dart 如果沒有,則在建構結構體時,繫結要求指定值 是 FIDL 定義中提供的預設值。
值通常為零,但應該明確宣告。
舉例來說,如果 uint32_t
代表 FTP 號碼,則 0
並非有效值,但 FIDL 無法表示呼叫端
請指定數字
設計
這主要只是說明文件說明。 它只會解釋 FIDL 介面中顯示的語意。 有機會改進繫結,但並未強制要求。
FIDL 語言規格應包含下列項目: 以不同的形式呈現:
結構體中的原始欄位和列舉欄位沒有預設值 FIDL 檔案在執行個體化時,必須指定在 繫結。 繫結作者「可能」遵循預設值 (如果主機語言做出變更) 以及程式設計師的常見且預期的行為。 例如,在 Dart 或 C++ 中,通常使用預設值。 在 Go 中,結構體預設會初始化,而結構則是慣用模式 提供標準初始化,是提供 NewMyStruct() 函式。 在 C 中,不會有初始化行為,所以程式設計師必須明確地 定義所有欄位。可能與 MACRO 相關。 如果繫結沿用預設值,就會:必須採用所有預設值 ,如果程式設計師無法初始化,請報告錯誤 非預設欄位
說明文件和範例
請務必更新語言規格和教學課程,以反映這項資訊 變更。
回溯相容性
不同語言繫結的現有行為會有所不同。 這項變更可讓所有現有行為,促進日後的行為。
成效
沒有影響。
安全性
這麼做不僅清楚說明規格,還不會誤用介面 變得更困難 這樣可以確保安全。
測試
不需要測試。
缺點、替代方案和未知
替代方法是正式定義:
struct Foo {
int32 bar;
bool baz;
float32 wux;
};
「 」在語意上等同於:
struct Foo {
int32 bar = 0;
bool baz = false;
float32 wux = 0.0;
};
但如前文所述,可能無法擷取重要語意。
本提案先前的疊代作業包含字串,但在 撰寫這些物件還是可為空值,所以有一種方式可以表明 必填或選填。
既有藝術品和參考資料
不適用