Slice是在ICE所特有的特殊語言,ICE 提供基於Ice語言的多語言映射工具。Slice主要針對程序所涉及到的接口和類型進行定義。不涉及到具體實現和具體語言的特徵。
既然ICE支持跨語言的調用,那麼是否是Slice支持每種的特有數據類型呢?
固然不是,ICE只是保留各類具體語言數據類型的最小交集。
提供:
- 1.bool (false or true,>=1bit)
- 2.byte (-128-127@,>=8bits)
- 3.short (-2^15 to 2^15-1,>=16bits)
- 4.int (-2^31 to 2^31-1,>=32bits)
- 5.long (-2^63 to 2^63-1,>=64bits)
- 6.float (IEEE single-precision,>=32bits)
- 7.double (IEEE double-precision,>=64bits)
- 8.string (All Unicode characters, excluding ,the character with all bits zero.)
string 採用Unicode編碼,具備很好的國際化語言支持。
下面主要在介紹一下Slice的特性和約束:
1. Slice文件必須以.ice結尾,其餘結尾方案的文件會被編譯器拒絕。
2. Slice 文件格式實際就是text文本描述,因爲Slice形式自由,能夠用任何文本編輯器進行編輯。
3. Slice 支持#ifndef,#define,#endif,#include
例如:
- // File Clock.ice
- #ifndef _CLOCK_ICE
- #define _CLOCK_ICE
- // #include directives here...
- // Definitions here...
- #endif _CLOCK_ICE
在include 要避免使用雙引號"",以及"",而要使用"/"
例如:
#include "Clock.ice" // 不推薦採用;
#include <SliceDefs/Clock.ice> // 正確
#include <SliceDefs\Clock.ice> // 非法
4.Slice 中文件的結構,模塊,接口,類型出現的順序,,能夠按照你的喜愛而自由定義。
5.Slice 的詞法規則不少來源於C++和Java,只有少許的差別。
6.能夠採用c++的註釋規則。// 或
7.Slice 的關鍵詞須要區分大小寫:
關鍵詞:
- bool enum implements module struct
- byte exception int Object throws
- class extends interface out true
- const false local sequence void
- dictionary float LocalObject short
- double idempotent long string
8.在接口定義的時候也避免使用非Slice關鍵字,可是C++ 或 Java關鍵字的標識符。
例如:switch
9.Ice保留了全部以"ice"做爲開始標識符。保留以"Helper","Holder","Prx","Ptr"結尾的標識符。因此你們定義的時候最好避免一些沒必要要的麻煩。
10.Ice能夠經過module嵌套的方式,相似於c++的namespace和java的包的概念。
11.除了剛纔提到的Slice支持的基礎類型外,還支持用戶自定義類型:enumerations, structures, sequences, and dictionaries.
enumerations:枚舉就不要介紹了,採用C++的語法形式
enum Fruit { Apple, Pear, Orange };
Structures:結構,也是採用C++的語法形式,避免,結構中定義結構
- 合法:
- struct TimeOfDay {
- short hour; // 0 - 23
- short minute; // 0 - 59
- short second; // 0 - 59
- };
- 無效:
- struct TwoPoints {
- struct Point { // Illegal!
- short x;
- short y;
- };
- Point coord1;
- Point coord2;
- };
sequence:序列號類型,映射到java採用的數組方式實現,而不是所謂的集合容器類型對象存儲。映射到C++中則採用STL容器存儲。
sequence<int> values;
dictionary:字典類型,映射到java採用Map 進行存儲,映射到C++採用map進行存儲.
dictionary<int,string> myValues;
12.常量定義能夠直接使用,但常量的定義必須是基本類型或枚舉類型.定義形式也是採用C++定義方式.
13.方法的定義,形式類型java的方法定義,方法返回可使void或對象類型.
14.Slice支持方法異常的定義,以及異常的繼承.關於異常機制,我想java開發者可能更加熟悉,
例如:
- exception Error {}; // Empty exceptions are legal
- exception RangeError {
- TimeOfDay errorTime;
- TimeOfDay minTime;
- TimeOfDay maxTime;
- };
- interface Clock {
- idempotent TimeOfDay getTime();
- idempotent void setTime(TimeOfDay time)
- throws RangeError, Error;
- };
Ice的錯誤機制也是異常強大,吸收了不少Java關於異常機制的特色.
Slice還包括不少良好的特性,在這裏就不一一列舉,對於支持自定義類型,基本類型,異常支持,對於通常的網絡通信應用已經足夠了,更多Slice語言的介紹參閱其幫助.
Ice爲咱們提供了強大而又豐富的Slice,能夠利用Slice,結合咱們應用的特色,定義間接的Slice描述。
btw:
雖然Slice提供給咱們豐富的功能和特性,在此我仍是建議你們儘可能採用基本類型和非異常機制.這樣會對系統性能會帶有必定的幫助。
另外接口的定義我想你們可以保持KISS(Keep it It Simple)設計原則,會使咱們的應用看起來更美麗。
不要過分的使用Slice,不然會給咱們帶來無盡的煩惱。