RFC-0063:OrdinalRange

RFC-0063:OrdinalRange
狀態已遭拒
區域
  • FIDL
說明

在介面中新增選用的 [OrdinalRange] 屬性。如果有,則介面定義的序數必須位於宣告的範圍內。

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

拒絕原因

我們有幾場討論要如何改進介面,以及如何沿用介面。例如,在介面上引入序數,而方法與方法列將有助於明確確定叫用的方法。因此,我們即將拒絕 [OrdinalRange] 提案。

但我們瞭解,控管繼承的重要性,因為現在的模式可能會有問題:如果程式庫作者並不知道,已定義的介面可能會遭到沿用,因此加入新方法時,會徹底破壞繼承層級。

因此,我們會暫時推出 (直到有更好的解決方案為止),要求所有需要沿用的介面都必須加上 [FragileBase] 註解。

與其他 RFC 的關係

這個 RFC 已由以下因素取代:

摘要

在介面中加入選用的 [OrdinalRange] 屬性。如果有,則介面定義的序數必須落在宣告範圍內。除非介面宣告 [OrdinalRange],否則子介面不能在其父介面所聲明的範圍內使用任何序數,才能繼承介面。

提振精神

在 FIDL 中,介面可以從其他介面繼承。FIDL 編譯器會防止兩個介面將不同的語意指派給相同序數,但超介面沒有機制能保留序數以供日後使用。如目前定義,如果在任何介面中加入序數,可能會導致其他 (未顯示) 從該介面繼承的介面並指派該序數。

FIDL 樣式評分量表建議在註解中提供了保留的序數範圍,建議解決這項問題 (至少針對預期沿用的介面)。這個 FTP 建議改為將這些預留項目放在介面的 [OrdinalRange] 屬性中。

設計

這項變更只會影響 FIDL 原文語言。不會影響傳輸格式或系統產生的任何繫結。實作作業可完全在 FIDL 前端編譯器中執行。

  1. 為介面加入選用的 [OrdinalRange] 屬性。這個標記存在時,此屬性的值必須符合以下文法:
    1. NUMERIC-LITERAL、「-」、「NUMERIC-LITERAL
  2. 如果有此屬性,則介面定義的所有序數都必須在指定範圍內 (含首尾)。
  3. 除非第二個介面含有 [OrdinalRange] 屬性,否則介面無法從其他介面繼承。
  4. 介面的所有超級介面都必須擁有定義不相交範圍的 [OrdinalRange] 屬性。
  5. 介面無法定義屬於任何父介面 [OrdinalRange] 的序數。

如果違反任何這些不變量,FIDL 前端就必須產生錯誤。

對於建議使用註解的 FIDL 樣式評分量表,替換基於此目的而需要使用 [OrdinalRange] 屬性的段落。

說明文件與範例

我們會在 FIDL 樣式的評分量表中記錄這項功能,並提供相關範例。

回溯相容性

這項功能無法回溯相容,因為除非我們在父介面中加入 [OrdinalRange] 屬性,否則使用沿用機制的現有項目將無法編譯。不過,我們很少使用繼承,而且更新所有超介面很容易。

效能

這項提案不會影響成效。

安全性

本提案不會對安全性造成任何影響。

測試

fuchsia.io 程式庫會提供陽性編譯測試。

缺點、替代方案和未知

實作本提案的主要缺點是,在介面之間建立繼承關係時將額外列入考量。但是該典禮已以有關保留序數範圍的註解形式呈現。

另一種做法是繼續使用註解以非正式的範圍保留。

先前的圖片和參考資料

我們假設其他類似的系統有類似之處,但並沒有進行研究。