| RFC-0019:使用 evolution = uint64; | |
|---|---|
| 狀態 | 已接受 |
| 區域 |
|
| 說明 | 新增機制,為基本型別提供更具描述性的名稱。移除狀態,因為這是語言的內建功能。導入 zx 程式庫,內含 |
| 作者 | |
| 提交日期 (年-月-日) | 2018-07-17 |
| 審查日期 (年-月-日) | 2018-08-03 |
摘要
新增機制,為基本型別提供更具描述性的名稱。
移除語言的內建狀態功能。導入 zx 程式庫,其中包含 <zircon/types.h> 的基本型別。
與其他 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-test 套件中進行測試,方法是加入使用 zx 程式庫中各個型別的 FIDL 檔案。
缺點、替代方案和未知事項
這項提案可在 FIDL 前端直接實作,且不需要變更語言專屬後端。
另一種做法是不解決問題,繼續直接使用原始型別。
既有技術和參考資料
這項功能在程式設計語言中非常常見。語法大致上是從 C++ 借用而來。