Slice語言
1. Slice(Specification Language for Ice)是一種用於使對象介面與其實現相分離的基礎性抽象機制。
因為Slice描述的是介面和類型,它是一種純粹的描述性語言;因此無法用slice語言來編寫可執行語句。
2. 編譯
兩種情況:客戶和伺服器使用相同、不同的開發環境
3. 源檔案
3.1 檔案命名
含有Slice定義的檔案必須以.ice副檔名結尾。
3.2 預先處理
使用#include指令時,只允許使用<>文法來指定檔案名稱,不能使用””。
3.3 定義次序
4. 文法規則
4.1 注釋
可以使用C或者C++的注釋風格。
4.2 關鍵字
4.3 標識符
標識符以一個字母開頭,後面可以跟任意數目的字母或數字。Slice標識符不能有底線。
5. 基本的Slice類型
6. 使用者定義的類型
對於像Slice這樣的規範語言而言,嵌套的類型定義並無必要。
6.1 Slice沒有null串的概念
7. 介面,操作以及異常
7.1 只有操作定義能出現在介面定義內部。
7.2 Slice不支援任何形式的操作重載。
7.3 nonmutating 關鍵字說明,getTime操作不會改變它的對象的狀態
idempotent 關鍵字表明某個操作可以安全的多次執行。
7.4 如果資料庫尋找返回空結果集就拋出異常,這是一種錯誤的做法。
7.5 大多數情況下,定義空介面說明在設計上存在一定的不合理性。
8. 類
8.1 簡單類
Slice的類定義與結構體相似,所用關鍵字是class。Struct不能定義為空白。
8.2 類繼承
與結構不同,類支援繼承。類支援單繼承。
8.3 類的繼承語義
類繼承可以傳遞多態的值。
8.4 類用作聯合
8.5 自引用的類
類具有值語義,而代理具有引用語義。自引用的類不僅能用於非循環圖表,也能用於循環圖表。
8.6 類 vs 結構
類提供了一些特性,是結構沒有的:
a. 類支援繼續 b. 類可以自引用 c. 類可以有操作 d. 類可以實現介面
8.7 有操作的類
類上的操作總是在調用者的地址空間執行,即類的操作是本地操作。
8.8 類在架構上的影響
8.9 實現介面的類
Slice類也可以用作伺服器中的servant,也就是說,類的執行個體可以用來提供介面的行為。
一個類可以實現若干介面。除了實現一個介面,一個類還可以拓展另一個類。
8.10 提前聲明
介面和類都可以進行提前聲明。提前聲明可以建立互相依賴的類對象。提前聲明的介面和類可以用作結構,異常,或類成員的類型,用作詞典的實值型別,用作操作的參數或者傳回型別。
8.11 模組
Module語言成分可以減輕全域名字空間帶來的名字衝突問題。Module分別映射到C++的Namespace和java的package。
在文法上,在另一個模組中提前聲明介面是非法的。(資料P109)
8.12 本地類型
任何Slice定義都可以用關鍵字local進行修飾。由於本地類型不能在伺服器端和用戶端之間傳送,本地類型永遠不能從外地調用。
8.13 Ice模組
整個Ice API的大部分內容都是作為Slice定義表示的。
8.14 中繼資料
中繼資料出現在一對方括弧中,含有一個或者多個有逗號分隔的串直接量。中繼資料意在用於特定的後端,比如特定語言映射的代碼產生器。
8.15 使用Slice編譯器
Ice為每種語言映射提供了單獨的Slice編譯器。