本文件定義了在 FIDL 中有特定含義的一般字詞 相關資訊如要進一步瞭解特定 FIDL 主題,請參閱 FIDL traihead 的 網域內。
類型、版面配置、限制
類型會分類 FIDL 類型系統中的值。類型會顯示在
FIDL 文法中定義的 type-constructor
位置。例如:
uint32
、string:10
和 vector<bool>
是類型。
版面配置是該類型的參數說明,這不涉及
單一型別,但會說明建立例項化原則取得的一系列型別
含有零或多個版面配置參數的版面配置。例如,vector
是
採用一個版面配置參數,例如 vector<bool>
本身
類型。另外,array
是採用兩個版面配置參數的版面配置。
產生類型,例如 array<bool, 3>
版面配置和類型的差異可能不大。例如:
高於 uint32
的類型並非完全正確。而是版面配置
採用零參數,與例項化時取得的類型不同。
FIDL 語法不會擷取這種區別,因此當 uint32
在
類型位置 (例如 alias uint = uint32;
),但確實參照了版面配置
uint32
,並利用零版面配置參數,隱含例項化。
限制會限制類型,只允許符合述詞的值。
舉例來說,string:10
類型的限制為 length <= 10
縮寫
:10
,表示字串長度不得超過 10 個位元組。
版面配置和版面配置參數會影響 FIDL 線中的位元組配置方式 格式,而限制條件會影響驗證限制 的支援物件 (詳情請參閱 RFC-050)。 透過語法,版面配置參數只能套用至版面配置和限制 只能套用到類型例如:
alias Bools = vector<bool>; // ok: layout parameter applied to layout
alias MaxTenBools = Bools:10; // ok: constraint applied to type
alias MaxTenBytes = Bools<byte>; // INVALID: layout parameter applied to type
alias MaxTen = vector:10; // INVALID: constraint applied to layout
類型例項的一般形式為
L<L_1, L_2, ..., L_n>:<C_1, C_2, ..., C_n>
其中 L
是版面配置,L_1
到 L_n
是版面配置參數,C_1
至 C_n
都是限制條件
成員、欄位、變化版本
宣告的「成員」是指屬於 也就是說,宣告是由零、一或多個成員組成。
舉例來說,請考慮使用 Mode
位元宣告:
type Mode = strict bits {
READ = 1;
WRITE = 2;
};
READ
和 WRITE
都是成員。
當參照結構體或資料表的成員時 以「欄位」的形式填入這些成員。
提及工會成員時 做為成員的「變化版本」
舉例來說,請考慮使用 Command
聯集宣告:
type Command = strict union {
1: create_resource CreateResource;
2: release_resource ReleaseResource;
};
兩個變化版本為 create_resource
和 release_resource
。
此外,聯集例項的所選變化版本是現行值 建立時間,
標記和序數
標記是譯文語言變體的鑑別器,例如
向目標語言建構模型,用來指出所選變數的所選變數
我們使用的是聯集模型舉例來說,假設
Command
聯集:
enum CommandTag {
Create,
Release,
}
interface Command {
tag: CommandTag,
data: CreateResource | ReleaseResource,
}
Command
的標記是 Command.tag
,類型為 CommandTag
。
代表 Command
每個變數的值和類型直到
。
請注意,部分語言不需要標記。舉例來說,某些語言會使用 對聯集的分支版本進行模式比對,而不是 明確標記值
普通是指線體變體識別器上,亦即用於
以 FIDL 線格式表示聯集的變體。
序數是在 FIDL 定義中明確指定 (本例中為 1
create_resource
和 2 為 release_resource
)。
編碼
編碼是指將目標語言值序列化的程序 檢查 FIDL 線格式
如果是 C 繫結系列 (HLCPP、LLPP),編碼則可指定更具體的
會計算符合 FIDL 線段配置的位元組和修補的意義
方法是以
FIDL_ALLOC_PRESENT
/FIDL_ALLOC_ABSENT
或
FIDL_HANDLE_PRESENT
/FIDL_HANDLE_ABSENT
將控點移到正確位置,將控點移到
頻外控點表格。
解碼
解碼是指將 FIDL 線格式轉換成譯文語言的值。
如果是 C 繫結系列 (HLCPP、LLPP),解碼器可能會有更明確的程式碼
會計算符合 FIDL 線段配置的位元組和修補的意義
指標和控點,取代 FIDL_ALLOC_PRESENT
/FIDL_ALLOC_ABSENT
或
FIDL_HANDLE_PRESENT
/FIDL_HANDLE_ABSENT
,具有「真實」指標/帳號代碼
驗證
「驗證」是檢查 FIDL 定義是否限制的程序 滿足指定值的狀況無論是對值進行編碼 或在收到值之後解碼時,才可能處理這個事件範例 限制條件是指向量邊界、處理限制以及 做為 UTF-8 的字串。
驗證失敗時,繫結會藉由以下兩種方法,向使用者顯示錯誤的程式碼: 請直接傳回,或是透過錯誤回呼傳回。
結果/錯誤類型
針對指定錯誤類型的方法:
DoWork() -> (struct { result Data; }) error uint32
「結果類型」是指
這個方法的集合,亦即由
Data
或 uint32
錯誤。在本例中,錯誤類型為 uint32
,而
Data
可稱為回應類型或成功類型。