FIDL 字典

本文件定義了在 FIDL 中有特定含義的一般字詞 相關資訊如要進一步瞭解特定 FIDL 主題,請參閱 FIDL traihead 的 網域內。

類型、版面配置、限制

類型會分類 FIDL 類型系統中的值。類型會顯示在 FIDL 文法中定義的 type-constructor 位置。例如: uint32string:10vector<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_1L_n 是版面配置參數,C_1C_n 都是限制條件

成員、欄位、變化版本

宣告的「成員」是指屬於 也就是說,宣告是由零、一或多個成員組成。

舉例來說,請考慮使用 Mode 位元宣告:

type Mode = strict bits {
    READ = 1;
    WRITE = 2;
};

READWRITE 都是成員。

當參照結構體或資料表的成員時 以「欄位」的形式填入這些成員。

提及工會成員時 做為成員的「變化版本」

舉例來說,請考慮使用 Command 聯集宣告:

type Command = strict union {
    1: create_resource CreateResource;
    2: release_resource ReleaseResource;
};

兩個變化版本為 create_resourcerelease_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_ABSENTFIDL_HANDLE_PRESENT/FIDL_HANDLE_ABSENT將控點移到正確位置,將控點移到 頻外控點表格。

解碼

解碼是指將 FIDL 線格式轉換成譯文語言的值。

如果是 C 繫結系列 (HLCPP、LLPP),解碼器可能會有更明確的程式碼 會計算符合 FIDL 線段配置的位元組和修補的意義 指標和控點,取代 FIDL_ALLOC_PRESENT/FIDL_ALLOC_ABSENTFIDL_HANDLE_PRESENT/FIDL_HANDLE_ABSENT,具有「真實」指標/帳號代碼

驗證

「驗證」是檢查 FIDL 定義是否限制的程序 滿足指定值的狀況無論是對值進行編碼 或在收到值之後解碼時,才可能處理這個事件範例 限制條件是指向量邊界、處理限制以及 做為 UTF-8 的字串。

驗證失敗時,繫結會藉由以下兩種方法,向使用者顯示錯誤的程式碼: 請直接傳回,或是透過錯誤回呼傳回。

結果/錯誤類型

針對指定錯誤類型的方法:

DoWork() -> (struct { result Data; }) error uint32

「結果類型」是指 這個方法的集合,亦即由 Datauint32 錯誤。在本例中,錯誤類型為 uint32,而 Data 可稱為回應類型或成功類型。