RFC-0063:OrdinalRange | |
---|---|
狀態 | 已遭拒 |
區域 |
|
說明 | 在介面中新增選用的 [OrdinalRange] 屬性。如果有,則介面定義的序數必須位於宣告的範圍內。 |
作者 | |
提交日期 (年/月) | 2018-07-31 |
審查日期 (年/月) | 2018-10-04 |
拒絕原因
我們有幾場討論要如何改進介面,以及如何沿用介面。例如,在介面上引入序數,而方法與方法列將有助於明確確定叫用的方法。因此,我們即將拒絕 [OrdinalRange]
提案。
但我們瞭解,控管繼承的重要性,因為現在的模式可能會有問題:如果程式庫作者並不知道,已定義的介面可能會遭到沿用,因此加入新方法時,會徹底破壞繼承層級。
因此,我們會暫時推出 (直到有更好的解決方案為止),要求所有需要沿用的介面都必須加上 [FragileBase]
註解。
與其他 RFC 的關係
這個 RFC 已由以下因素取代:
摘要
在介面中加入選用的 [OrdinalRange]
屬性。如果有,則介面定義的序數必須落在宣告範圍內。除非介面宣告 [OrdinalRange]
,否則子介面不能在其父介面所聲明的範圍內使用任何序數,才能繼承介面。
提振精神
在 FIDL 中,介面可以從其他介面繼承。FIDL 編譯器會防止兩個介面將不同的語意指派給相同序數,但超介面沒有機制能保留序數以供日後使用。如目前定義,如果在任何介面中加入序數,可能會導致其他 (未顯示) 從該介面繼承的介面並指派該序數。
FIDL 樣式評分量表建議在註解中提供了保留的序數範圍,建議解決這項問題 (至少針對預期沿用的介面)。這個 FTP 建議改為將這些預留項目放在介面的 [OrdinalRange]
屬性中。
設計
這項變更只會影響 FIDL 原文語言。不會影響傳輸格式或系統產生的任何繫結。實作作業可完全在 FIDL 前端編譯器中執行。
- 為介面加入選用的
[OrdinalRange]
屬性。這個標記存在時,此屬性的值必須符合以下文法:NUMERIC-LITERAL
、「-
」、「NUMERIC-LITERAL
」
- 如果有此屬性,則介面定義的所有序數都必須在指定範圍內 (含首尾)。
- 除非第二個介面含有
[OrdinalRange]
屬性,否則介面無法從其他介面繼承。 - 介面的所有超級介面都必須擁有定義不相交範圍的
[OrdinalRange]
屬性。 - 介面無法定義屬於任何父介面
[OrdinalRange]
的序數。
如果違反任何這些不變量,FIDL 前端就必須產生錯誤。
對於建議使用註解的 FIDL 樣式評分量表,替換基於此目的而需要使用 [OrdinalRange]
屬性的段落。
說明文件與範例
我們會在 FIDL 樣式的評分量表中記錄這項功能,並提供相關範例。
回溯相容性
這項功能無法回溯相容,因為除非我們在父介面中加入 [OrdinalRange]
屬性,否則使用沿用機制的現有項目將無法編譯。不過,我們很少使用繼承,而且更新所有超介面很容易。
效能
這項提案不會影響成效。
安全性
本提案不會對安全性造成任何影響。
測試
fuchsia.io
程式庫會提供陽性編譯測試。
缺點、替代方案和未知
實作本提案的主要缺點是,在介面之間建立繼承關係時將額外列入考量。但是該典禮已以有關保留序數範圍的註解形式呈現。
另一種做法是繼續使用註解以非正式的範圍保留。
先前的圖片和參考資料
我們假設其他類似的系統有類似之處,但並沒有進行研究。