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

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

我們提議宣告一個可讓程式碼進行建構的新屬性,無論方法是否實作。

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

摘要

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

提振精神

自從將 Fuchsia 樹狀圖移至全球整合硬性變更的花卉模型後,這變得...很難。基於這個原因,開發人員必須在繫結中實作 FIDL 介面,並具體實作在 FIDL 介面中定義的方法組合。換句話說,如果在單一部分介面中加入或移除某個方法,全域整合功能就會失敗。

設計

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

呼叫過渡方法已定義為實作方式,它可能會如上文所述,有時可能無法完成,甚至可能導致呼叫端或受呼叫者當機。不得乾擾其他方法的運作,且必須能夠實作此方法。FIDL 前端編譯器完全不需要變更,只需要語言繫結。

C

  • 您無法在 C 繫結中實作方法並非建構時間錯誤,因此這裡不必執行任何操作。

C++

  • 與其將方法宣告為純虛擬函式,不如以單純輸出錯誤的基礎實作方式進行宣告。

飛鏢

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

查看

  • 轉換方法可在新引進的結構「InterfaceStubBase」中預設實作,該結構可嵌入實際的實作結構中,以提供正向/反向相容性。

Rust

  • 未定

導入策略

一旦我們制定了長期演進技術,我們就會從 FIDL 中移除這項功能。

說明文件與範例

回溯相容性

請參閱下方的「缺點」。

效能

不使用時不會影響效能。建議您針對 [Transitional] 方法使用動態調度,而非直接呼叫策略,藉此可能產生額外的間接指示。

安全性

不影響,轉換方法快速失敗。

測試

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

缺點、替代方案和未知

這種做法並未提供 FIDL 介面的長期演進方式。 不提供重新命名方法或變更簽名的功能,但可做為多階段程序的一部分。但無法解決將變化版本新增至聯集的問題。

先前的圖片和參考資料