RFC-0233:預設使用 FIDL 舊版 | |
---|---|
狀態 | 已遭拒 |
領域 |
|
說明 | 變更 @available 屬性,將已移除的元素預設為 legacy=true |
毛皮變化 | |
作者 | |
提交日期 (年-月-日) | 2023-08-23 |
審查日期 (年-月-日) | 2023 年 10 月 24 日 |
拒絕原因
這個 RFC 遭到拒絕,改用 RFC-0232: FIDL 繫結至多個 API
層級。這兩項提案的目標,都是為瞭解決
legacy
功能。此做法可提升品質,
RFC-0232 完全取下了相關功能,並以更好的方式取代。
停用 legacy
後,這個 RFC 就不再相關。
摘要
將 FIDL @available
屬性變更為預設值 legacy=true
,因此
必須legacy=false
停止納入 LEGACY
。
背景
從原始設計 FIDL 的版本管理中,您將無法移除
元素,同時保留對其 ABI 的支援。舉例來說,如果 CL 標示了方法
與 removed=5
一樣,還必須刪除該方法的實作。
這是因為我們已在 HEAD
上建構 Fuchsia 平台,以及此方法的伺服器
繫結不再存在 HEAD
中,因為其大於 5。
為解決這個問題,我們修訂 RFC-0083 並
LEGACY
版本和 legacy
引數。LEGACY
版本就像 HEAD
。
否則會重新加入標示為 legacy=true
的元素。
提振精神
使用者不清楚是否應該在移除時編寫「legacy=true
」
FIDL API答案是:幾乎總是,除非你更換了。此外
錯誤使用 legacy=false
(ABI 服務中斷) 的結果嚴重
大於 legacy=true
(fidlc 編譯錯誤,或繫結中未使用的 API)
這都表示應翻轉預設值。
相關人員
講師:abarth@google.com
審查人員:hjfreyer@google.com、ianloic@google.com
諮詢者:Wez@google.com、sethladd@google.com、wilkinsonclay@google.com
社交:我與 FIDL 團隊和平台討論了這個想法 在寫入 RFC 之前的版本管理工作群組。
設計
將 @available
屬性的 legacy
引數預設為 true
removed
元素。允許 legacy=false
覆寫預設值。
實作
變更所有 FIDL 檔案,在全部
removed
上明確指定legacy=false
但不含legacy=true
的元素。暫時將
legacy
設為removed
元素的必要引數。 如果 (1) 錯過任何資訊,CQ 就會失敗。再次將
legacy
設為選用項目 (預設為 true)。變更所有 FIDL 檔案,移除例項中的
legacy=true
。
成效
此提案不會影響成效。
人體工學
本提案讓 FIDL 版本管理功能更容易使用。尤其是
移除 legacy=true
移除
元素。
回溯相容性
此提案有助於達成 ABI 回溯相容性,因為這能使 語法,即可選擇停用 ABI 相容性
安全性考量
此提案不會影響安全性。
隱私權注意事項
此提案對隱私權沒有任何影響。
測試
必須先更新下列檔案,才能測試新行為:
- tools/fidl/fidlc/tests/availability_interleaving_tests.cc
- tools/fidl/fidlc/tests/decomposition_tests.cc
- tools/fidl/fidlc/tests/versioning_tests.cc
- tools/fidl/fidlc/tests/versioning_types_tests.cc
說明文件
下列說明文件頁面必須更新:
缺點、替代方案和未知
替代做法:removed
和 replaced
的預設值
在本提案中,替換元素需要寫入 legacy=false
。
舉例來說,如要將列舉從嚴格改為彈性版本 10:
@available(removed=10, legacy=false)
type Foo = strict enum { VAL = 1; };
@available(added=10)
type Foo = flexible enum { VAL = 1; };
如果同時接受 RFC-0231: FIDL 版本管理語法,
可能會將 removed
的預設值設為 true,replaced
則為 false。
替代做法:移除 legacy
引數
使用新的預設值時,為何要完全保留 legacy
引數?我們提供三種
使用 legacy=false
移除元素的案例:
在某些情況下移除彈性資料結構的成員。您可以考慮使用 移除表格欄位如果舊版支援元件 忽略該欄位,則
LEGACY
中不需要該欄位的繫結。捨棄對舊 API 級別的支援,並移除實作。
用途 (2) 可能很少,而且並非必要。沒什麼傷害
針對這類成員擁有未使用的 LEGACY
繫結。
用途 (3) 是真實的,但我們可以直接刪除程式碼,而不是 legacy=false
FIDL 檔案這表示我們無法再重新產生
但可以改為儲存預先產生的說明文件
替代做法:將 LEGACY
替換為目標/最低等級
詳情請參閱 https://fxrev.dev/ TODO
既有藝術品和參考資料
我不看相關技術,因為這只是改變提案的提案 預設值。