RFC-0021:新增及移除方法的軟性轉場效果 | |
---|---|
狀態 | 已接受 |
區域 |
|
說明 | 我們建議宣告新的屬性,無論方法是否已實作,都允許程式碼建構。 |
作者 | |
提交日期 (年-月-日) | 2018-10-31 |
審查日期 (年-月-日) | 2018-11-01 |
摘要
我們建議宣告新的屬性,無論方法是否已實作,都允許建構程式碼。
提振精神
自從將 Fuchsia 樹移至全局整合的花朵模型後,硬性中斷變更已變得... 困難。這是因為開發人員必須在具體實作中,將 FIDL 介面中定義的方法套用到繫結中,才能在繫結中實作 FIDL 介面。也就是說,如果在一個花瓣中新增或移除介面的方法,則全域整合作業會失敗。
設計
我們應宣告新的屬性 [Transitional="description"]
,指示繫結產生程式碼,無論方法是否已實作,都能成功建構。
呼叫轉換方法是由實作方式定義,可能會按照說明書運作、可能永遠無法完成,甚至可能會導致呼叫端或被呼叫端當機。不得干擾其他方法的運作,且必須能夠實作該方法。FIDL 前端編譯器完全不需要變更,只有語言繫結需要變更。
C
- 在 C 繫結中實作方法失敗並非建構時的錯誤,因此您不必採取任何行動。
C++
- 請不要將方法宣告為純虛擬函式,而是使用具體的基本實作來宣告方法,這樣做只會顯示錯誤。
Dart
- 請勿宣告沒有主體的方法,而是使用可傳回失敗 Future 或擲回例外狀況的主體來宣告方法 (視繫結樣式而定)。
查看
- 過渡方法可以在新推出的結構體「InterfaceStubBase」上實作預設實作方式,並嵌入實際實作結構體,以提供前向/回溯相容性。
荒漠油廠
- 未定
導入策略
一旦我們找到長期演進的方法,就會從 FIDL 中移除這項功能。
說明文件和範例
回溯相容性
請參閱下方的「缺點」。
成效
未使用時不會影響效能。使用 [Transitional]
方法的動態調度功能,而非更直接的呼叫策略,可能會導致額外的間接呼叫。
安全性
不會造成影響,但轉換方法會失敗。
測試
在程式庫之前/期間/之後產生程式碼,以模擬使用 [Transitional]
屬性新增或移除方法和事件,並確保編譯成功。
缺點、替代方案和未知事項
這無法為 FIDL 介面的長期演進提供前進方向。雖然無法用於重新命名方法或變更其簽章,但可用於多階段程序的一部分。但無法解決在聯合體中新增變化版本的問題。
既有技術與參考資料
無