RFC-0019:使用 evolution = uint64; | |
---|---|
狀態 | 已接受 |
區域 |
|
說明 | 新增機制,為基本類型提供更具描述性的名稱。移除狀態做為語言內建功能。引入 zx 程式庫,以便包含 |
作者 | |
提交日期 (年-月-日) | 2018-07-17 |
審查日期 (年-月-日) | 2018-08-03 |
摘要
新增機制,為基本類型提供更具描述性的名稱。移除狀態做為語言內建功能。引入 zx 程式庫,以便包含 <zircon/types.h>
的基本類型。
與其他 RFC 的關係
此 RFC 已由下列 RFC 取代:
提振精神
開發人員通常會為基本類型指派更具描述性的名稱。舉例來說,status
是 int32
的更具描述性的名稱,但 status
已內建於語言中,其他類型則無法以相同方式使用。
設計
這項提案只會影響 FIDL 原始語言。
- 擴充
using
關鍵字,以便為基本類型指派描述性名稱。具體來說,請在 FIDL 文法中加入下列產生式:
using-list = ( using | using-declaration )* ;
using-declaration = "using" , IDENTIFIER , "=" , primitive-type , ";" ;
從語言中移除
status
原始類型。status
原始類型現在可以使用該語言本身定義,而非內建功能。移除
status
保留字。我們現在可以使用該語言定義名稱,因此不再需要保留status
這個字詞。新增zx
程式庫,其中包含 Zircon 系統介面定義的原始類型宣告。在理想情況下,這個程式庫會從包含此資訊的未來 syscalls.abigen 產生。例如:
library zx;
using status = int32;
using time = uint64;
using duration = uint64;
[...]
請注意,這些宣告必須出現在 using 清單中,且必須直接參照基本類型。這種做法可避免編譯器的複雜性,因為其用途可立即轉譯為基礎的原始類型。
此外,請注意,系統不會針對任何目標語言的產生程式碼提出變更建議。這些類型會在目標語言中以基礎原始類型表示。
說明文件和範例
使用範例
1: AdvanceTime(zx.duration duration) -> (zx.status status);
回溯相容性
這項變更會移除 status
原始類型,因此與 FIDL 原始語言不相容。不過,由於 status
的現有用戶端可以直接改用 zx.status
,因此遷移作業相當簡單。
成效
這項變更不會影響成效。
安全性
這項變更不會影響安全性。
測試
我們會在 Zircon 的 fidl 測試套件中測試這項功能,方法是新增使用 zx
程式庫中每種型別的 FIDL 檔案。
缺點、替代方案和未知事項
這項提案在 FIDL 前端中實作起來相當簡單,也不需要變更特定語言的後端。
另一種做法是不要解決問題,繼續直接使用基本類型。
既有技術與參考資料
這項功能在程式設計語言中非常常見。語法是從 C++ 中借用而來。