RFC-0021:新增及移除方法的軟轉換 | |
---|---|
狀態 | 已接受 |
區域 |
|
說明 | 我們提議宣告一個可讓程式碼進行建構的新屬性,無論方法是否實作。 |
作者 | |
提交日期 (年/月) | 2018-10-31 |
審查日期 (年/月) | 2018-11-01 |
摘要
我們提議宣告新的屬性,則無論方法是否實作,都可允許程式碼進行建構。
提振精神
自從將 Fuchsia 樹狀圖移至全球整合硬性變更的花卉模型後,這變得...很難。基於這個原因,開發人員必須在繫結中實作 FIDL 介面,並具體實作在 FIDL 介面中定義的方法組合。換句話說,如果在單一部分介面中加入或移除某個方法,全域整合功能就會失敗。
設計
我們應宣告新的屬性 [Transitional="description"]
,指示繫結產生可成功建構的程式碼,無論方法是否實作都會成功。
呼叫過渡方法已定義為實作方式,它可能會如上文所述,有時可能無法完成,甚至可能導致呼叫端或受呼叫者當機。不得乾擾其他方法的運作,且必須能夠實作此方法。FIDL 前端編譯器完全不需要變更,只需要語言繫結。
C
- 您無法在 C 繫結中實作方法並非建構時間錯誤,因此這裡不必執行任何操作。
C++
- 與其將方法宣告為純虛擬函式,不如以單純輸出錯誤的基礎實作方式進行宣告。
飛鏢
- 請勿宣告沒有主體的方法,而是使用會傳回失敗的 Future 或擲回例外狀況 (視繫結樣式而定) 的主體進行宣告。
查看
- 轉換方法可在新引進的結構「InterfaceStubBase」中預設實作,該結構可嵌入實際的實作結構中,以提供正向/反向相容性。
Rust
- 未定
導入策略
一旦我們制定了長期演進技術,我們就會從 FIDL 中移除這項功能。
說明文件與範例
回溯相容性
請參閱下方的「缺點」。
效能
不使用時不會影響效能。建議您針對 [Transitional]
方法使用動態調度,而非直接呼叫策略,藉此可能產生額外的間接指示。
安全性
不影響,轉換方法快速失敗。
測試
在程式庫前後/執行期間產生程式碼,使用 [Transitional]
屬性模擬新增或移除方法和事件,並確保編譯成功。
缺點、替代方案和未知
這種做法並未提供 FIDL 介面的長期演進方式。 不提供重新命名方法或變更簽名的功能,但可做為多階段程序的一部分。但無法解決將變化版本新增至聯集的問題。
先前的圖片和參考資料
無