`
masterkey
  • 浏览: 337587 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ZeroC ICE之旅------Slice

阅读更多
   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++的注释规则。// 或 /* xxx */
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,否则会给我们带来无尽的烦恼。


ZeroC ICE之旅------集群和容错
http://masterkey.iteye.com/blog/185081
2
2
分享到:
评论

相关推荐

    前端开源库-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