RFC-0021:適用於新增和移除方法的軟式轉換

RFC-0021:新增及移除方法的軟性轉場效果
狀態已接受
區域
  • FIDL
說明

我們建議宣告新的屬性,無論方法是否已實作,都允許程式碼建構。

作者
提交日期 (年-月-日)2018-10-31
審查日期 (年-月-日)2018-11-01

摘要

我們建議宣告新的屬性,無論方法是否已實作,都允許建構程式碼。

提振精神

自從將 Fuchsia 樹移至全局整合的花朵模型後,硬性中斷變更已變得... 困難。這是因為開發人員必須在具體實作中,將 FIDL 介面中定義的方法套用到繫結中,才能在繫結中實作 FIDL 介面。也就是說,如果在一個花瓣中新增或移除介面的方法,則全域整合作業會失敗。

設計

我們應宣告新的屬性 [Transitional="description"],指示繫結產生程式碼,無論方法是否已實作,都能成功建構。

呼叫轉換方法是由實作方式定義,可能會按照說明書運作、可能永遠無法完成,甚至可能會導致呼叫端或被呼叫端當機。不得干擾其他方法的運作,且必須能夠實作該方法。FIDL 前端編譯器完全不需要變更,只有語言繫結需要變更。

C

  • 在 C 繫結中實作方法失敗並非建構時的錯誤,因此您不必採取任何行動。

C++

  • 請不要將方法宣告為純虛擬函式,而是使用具體的基本實作來宣告方法,這樣做只會顯示錯誤。

Dart

  • 請勿宣告沒有主體的方法,而是使用可傳回失敗 Future 或擲回例外狀況的主體來宣告方法 (視繫結樣式而定)。

查看

  • 過渡方法可以在新推出的結構體「InterfaceStubBase」上實作預設實作方式,並嵌入實際實作結構體,以提供前向/回溯相容性。

荒漠油廠

  • 未定

導入策略

一旦我們找到長期演進的方法,就會從 FIDL 中移除這項功能。

說明文件和範例

回溯相容性

請參閱下方的「缺點」。

成效

未使用時不會影響效能。使用 [Transitional] 方法的動態調度功能,而非更直接的呼叫策略,可能會導致額外的間接呼叫。

安全性

不會造成影響,但轉換方法會失敗。

測試

在程式庫之前/期間/之後產生程式碼,以模擬使用 [Transitional] 屬性新增或移除方法和事件,並確保編譯成功。

缺點、替代方案和未知事項

這無法為 FIDL 介面的長期演進提供前進方向。雖然無法用於重新命名方法或變更其簽章,但可用於多階段程序的一部分。但無法解決在聯合體中新增變化版本的問題。

既有技術與參考資料