RFC-0066:程式設計師明確預設值

RFC-0066:程式設計師明確預設值
狀態已接受
領域
  • FIDL
說明

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;
};

但如前文所述,可能無法擷取重要語意。

本提案先前的疊代作業包含字串,但在 撰寫這些物件還是可為空值,所以有一種方式可以表明 必填或選填。

既有藝術品和參考資料

不適用