`

ZeroC ICE之旅------Slice

    博客分类:
  • ice
阅读更多
Slice是在ICE所特有的特殊语言,ICE 提供基于Ice语言的多语言映射工具。Slice主要针对程序所涉及到的接口和类型进行定义。不涉及到具体实现和具体语言的特征。
既然ICE支持跨语言的调用,那么是不是Slice支持每种的特有数据类型呢?
当然不是,ICE只是保留各种具体语言数据类型的最小交集。
提供:
Java代码

1. 1.bool (false or true,>=1bit)
2. 2.byte (-128-127@,>=8bits)
3. 3.short (-2^15 to 2^15-1,>=16bits)
4. 4.int (-2^31 to 2^31-1,>=32bits)
5. 5.long (-2^63 to 2^63-1,>=64bits)
6. 6.float (IEEE single-precision,>=32bits)
7. 7.double (IEEE double-precision,>=64bits)
8. 8.string (All Unicode characters, excluding ,the character with all bits zero.)

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
例如:
Java代码

1. // File Clock.ice
2. #ifndef _CLOCK_ICE
3. #define _CLOCK_ICE
4. // #include directives here...
5. // Definitions here...
6. #endif _CLOCK_ICE

// File Clock.ice
#ifndef _CLOCK_ICE
#define _CLOCK_ICE
// #include directives here...
// Definitions here...
#endif _CLOCK_ICE


在include 要避免使用双引号"",以及"\",而要使用"/"
例如:
#include "Clock.ice" // 不推荐采用;
#include // 正确
#include <SliceDefs\Clock.ice> // 非法
4.Slice 中文件的结构,模块,接口,类型出现的顺序,,可以按照你的喜好而自由定义。
5.Slice 的词法规则很多来源于C++和Java,只有少量的差异。
6.可以采用c++的注释规则。// 或 /* xxx */
7.Slice 的关键词需要区分大小写:
关键词:
Java代码

1. bool enum implements module struct
2. byte exception int Object throws
3. class extends interface out true
4. const false local sequence void
5. dictionary float LocalObject short
6. double idempotent long string

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++的语法形式,避免,结构中定义结构
Java代码

1. 合法:
2. struct TimeOfDay {
3. short hour; // 0 - 23
4. short minute; // 0 - 59
5. short second; // 0 - 59
6. };
7. 无效:
8. struct TwoPoints {
9. struct Point { // Illegal!
10. short x;
11. short y;
12. };
13. Point coord1;
14. Point coord2;
15. };

合法:
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 values;
dictionary:字典类型,映射到java采用Map 进行存储,映射到C++采用map进行存储.
dictionary myValues;
12.常量定义可以直接使用,但常量的定义必须是基本类型或枚举类型.定义形式也是采用C++定义方式.
13.方法的定义,形式类型java的方法定义,方法返回可以使void或对象类型.
14.Slice支持方法异常的定义,以及异常的继承.关于异常机制,我想java开发者可能更加熟悉,
例如:
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;
};

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描述。

虽然Slice提供给我们丰富的功能和特性,在此我还是建议大家尽量采用基本类型和非异常机制.这样会对系统性能会带有一定的帮助。
另外接口的定义我想大家能够保持KIS(Keep It Simple)设计原则,会使我们的应用看起来更美丽。
不要过度的使用Slice,否则会给我们带来无尽的烦恼。
分享到:
评论

相关推荐

    前端开源库-css-slice-imgs

    【前端开源库-css-slice-imgs】是一个专为前端开发者设计的开源库,其核心功能是帮助优化CSS中的背景图像处理。在Web开发中,为了提高页面加载速度和减少HTTP请求,开发者常会将一张大的图片切割成多个小图,然后...

    Ice-1.3.0-中文文档.pdf

    - 文档由几部分组成,包括引言、Ice综述、Ice核心概念、客户端的Slice-to-C++映射、客户端的Slice-to-Java映射等章节。 - 每章都包括了综述、内容细节以及总结。 5. Slice语言: - Slice是Interface Definition ...

    ice-builder-xcode:Shell脚本,可在Xcode中将Slice文件编译为C ++或Objective-C

    安装自制酒通过运行以下命令,使用Homebrew安装Ice Builder for Xcode: brew install zeroc-ice/tap/ice-builder-xcode手动地将 shell脚本下载到系统上的任何路径。 例如: /usr/local/bin/icebuilder 。用法选项...

    Ice-3.4.2安装包

    - 创建一个简单的Ice应用,需要定义接口(称为“ Slice”),然后生成对应的客户端和服务端代码。 - 编写服务端代码实现接口,并启动服务器。使用`icebox`工具可以便捷地管理和控制服务。 - 编写客户端代码,连接...

    Ice-1.3.0-C

    2. **编译器支持**:Ice的编译器slice2cpp、slice2java等能够生成特定于语言的代码,而CORBA的编译器则通常生成通用的IDL代码。 3. **架构灵活性**:Ice的架构更为灵活,支持更多的定制化需求,而CORBA的架构较为...

    ice-builder-gradle:Gradle插件可自动将Slice文件编译为Java

    《ice-builder-gradle:Gradle插件自动化Slice到Java的编译流程》 在IT行业中,构建工具的效率和灵活性对于开发团队来说至关重要。Gradle作为一款强大的、灵活的构建自动化工具,广泛应用于Java和其他语言的项目。...

    h264-sps-slice-nalunit解析VS2017.rar

    本文将围绕“h264-sps-slice-nalunit”这一主题,深入探讨H264编码中的关键组件——Sequence Parameter Set (SPS)、Picture Parameter Set (PPS)、Slice以及Network Access Layer Unit (NAL Unit),并结合Visual ...

    Time-slice-rotation-algorithm.rar_slice

    current-&gt;time_slice--; return current; } else { // 时间片耗尽,将进程放回队尾 rear--; // 因为队列是循环的,所以这里可以不用考虑溢出 current-&gt;time_slice = initial_time_slice; // 重置时间片 return...

    ICE入门指南-分布式开发

    在“HelloWorld.ice”文件中,使用ICE的 Slice语言定义接口,如: ```ice module HelloWorld { interface Hello { void say(string message); }; } ``` 4.2 **生成框架代码** 使用ICE的slice2cpp工具,将Slice...

    ice最简单实现 ruby调用ice接口 - Ruby - language - ITeye论坛

    你需要将`.ice`文件编译为Ruby代码,使用命令行工具`icecpp`或`icec`,例如:`icecpp -o gen Ruby slice_file.ice`。这将生成Ruby的代理和stub类。 4. 实现服务:在服务器端,你需要创建一个实现了`.ice`文件中定义...

    ice源码(Ice-3.4.1.tar.gz)

    在`slice`目录下,可以看到许多`.ice`文件,这些文件定义了服务接口、数据类型和异常,通过`slice2xx`工具可以生成目标语言的代码。 4. **通信机制** ICE采用基于TCP/IP的二进制协议,实现高效的数据传输。其核心...

    ice-builder-visualstudio:从Visual Studio为MSBuild配置Ice Builder

    用于Visual Studio的Ice Builder Ice Builder for Visual Studio是一个Visual Studio扩展,可以在Visual Studio IDE中为您的C ++和C#项目配置 。 它充当MSBuild的Ice Builder的前端:所有构建时间处理均由Ice ...

    Zero Ice 3.6源码

    "Zero Ice 3.6源码" 是ZEROC公司提供的一个开源通信协议软件的源代码版本,其核心组件称为ICE(Internet Communications Engine),意即互联网通信引擎。ICE作为一个面向对象的中间件,旨在简化分布式系统开发,提供...

    gulp-ice-builder:Gulp插件,可自动将Slice文件编译为JavaScript

    slice2js gulp-ice-builder调用slice2js编译器。 您可以使用以下命令安装最新的 : npm install slice2js --save-dev 用法 const iceBuilder = require ( 'gulp-ice-builder' ) ; gulp . task ( "slice2js" , ( ) ...

    center_slice-masterx.zip

    在本文中,我们将深入探讨Flutter框架中的`center_slice`概念,并通过给定的`center_slice-master.zip`压缩包文件中的示例进行详细解释。`center_slice`是一种在UI设计中常用于图片或背景图像处理的技术,它允许图像...

    Zeroc ICE中间件slice2java的ant脚本(v1u0_0)

    `slice2java`是ICE提供的一个工具,它可以将`slice`文件转换为Java语言的接口和数据类型实现。 在这个名为"Zeroc ICE中间件slice2java的ant脚本(v1u0_0)"的资源中,包含了一个Ant构建脚本`slice2java.xml`。Ant是...

    zeroc ice教程 ice环境配置 Ice中文教程 C++ ICE java ICE ICE入门 ice基础教程 ice开发文档

    _slice语言_是ICE的核心部分,文档详细介绍了Slice语言的编译过程、源文件结构、词法规则等。Slice语言支持多种类型定义,包括基本的Slice类型、用户定义类型、接口、操作和异常等。它还提供了对模块和名字空间的...

Global site tag (gtag.js) - Google Analytics