==========================================================ICE:Slice语言(二)--源文件和词法规则:
文件命名
Slice的源文件以.ice为扩展名。
对于大小写不区分的系统(例如DOS),文件的扩展名可以大写,也可以小写,例如Click.ICE是有效的。二对于大小写敏感的系统(如Unix),Clock.ICE是非法的(此时的扩展名应该小写)。
文件格式
Slice是无格式语言,因此你可以使用空格、横向和纵向制表符、换行符安排你的代码布局。Slice中语义和定义的布局没有关联。
预处理
Slice支持#ifndef,@define,@endif以及#include与定义指令。不过它们有如下的限制:
1.#ifndef,#define和#endif指令的用途是创建双包含的块。例如:
#ifndef CLOCKICE
#define CLOCKICE
// #include 指令
//定义
#endif CLOCKICE
2.#include 指令只能出现在Slice源文件的开始部位。也就是说,#include必须出现在所有Slice定义的前面。此外,#include指令只能使用<>语法来指定一个要包含的文件名称。例如:
#include <File1.ice>
Slice不支持用这些预处理指令做其他用途,也不支持使用C++预定义指令。
#include指令允许Slice似乎用其它文件中的类型定义。Slice编译器会解析源文件中的所有代码,其中包括了#include指令指定的文件中的代码。实际上,编译器只编译编译命令中指定的顶层文件并生成代码,因此你必须单独编译每一个inlcude的文件。
定义顺序
Slice的结构,例如模块,接口或类型定义可以用任何顺序出现。但是定义必须在使用之前声明。
Lexical Rule词法规则
Slice的语法规则与C++和Java很相似,除了标示符的差异。
注释
Slice允许使用C和C++的注释风格:
/*
*C 风格注释
*/
//C++风格
关键字
Slice使用小写拼写关键字。例如class和dictionary都是关键字。不过有两个例外,Object和LocalObject也都是关键字,但是必须如显示的方式拼写。
标识符
标识符以一个字母起头,后面可以跟随字符和数字。Slice的标识符被限制在ASCII字符集内并且不支持非英语的字符。
不同于C++的标识符,Slice的标识符不能有下划线。这个限制看起来似乎很苛刻,但是却是有必要的。保留下划线,就让多语言的映射获取了命名空间,从而不会于合法的Slice标识符产生冲突。
大小写敏感
标识符是大小写不敏感的,但是必须保持拼写一致。例如TimeOfDay和TIMEOFDAY在同一个命名空间中是一样的。但是,Slice强制拼写一致。一旦你定义了一个标识符之后,你必须自始至终的拼写这个标识符的大小写,否则,编译器会认为这是非法的标识符。这条规则之所以存在,是因为这样就允许Slice可以映射到大小写敏感的语言也能映射到大小写不敏感的语言。
是关键字的标识符
你可以使用其他语言的关键字来定义Slice标示符,例如,switch可以用来作为Slice标识符,但是也是Java和 C plus plus 的关键字。Slice语言映射中针对每一种语言都定义了映射规则来处理这样的标识符。例如,Slice把switch映射为 C plus plus 的_cpp_stitch和Java的_switch。
转义的标识符
你可以用过使用\符号来将Slice的关键字转换为标识符。例如
struct dictionary{ //错误的定义
}
struct \dictionary{ //正确的定义
}
\符号改变了关键字的含义。在上面的例子中,\dictionary被当作dictionary标识符处理。使用转义的标识符可以允许我们以后加入新的关键字,而不对当前存在的规范造成影响。
保留的标识符
Slice将Ice以及以Ice开始的所有标识符作为保留的标识符。例如,Icecream将会被认为是非法的标识符。
同时,Slice还将以以下标识符为后缀的标识符视为保留的标识符:
Helper
Hodler
Prx
Ptr
保留它们,主要是为了防止在生成代码时发生冲突。
=============================================================ICE:Slice语言(三)--模块
对于大型系统来说,一个常见的问题就是全局命名空间的杂乱不堪:随着开发进度的发展,独立系统的不断整合,命名冲突也就不断出现。Slice提供了模块结构来缓和命名冲突。
如下的结构:
module MutableRealms
{
module WishClient { }; module WishServer { };
}
一个模块能容纳任何合法的Slice结构,包括其他的模块定义。使用模块组织相关的定义从而避免全局命名的杂乱和减少命名冲突的可能。
Slice要求所有的定义被嵌套在模块中,这样你就不在模块之外定义一个全局的定义。例如,下面的代码是不合法的:
interface I
{
//错误:全局定义中只能是module
}
全局定义是被禁止的原因是因为某些实现语言不支持全局定义。例如Python。
模块是可以被二次定义的。例如:
module MutableRealms
{
//这里是定义
};
//也许在另一个源文件中:
module MutableRealms
{
//正确的,二次模块定义 //更多的定义
};
二次定义模块对于大型项目是非常有用的:它们允许你在几个源文件中存放一个模块的内容。这样做的好处就是当一个开发者修改了模块的某一个部分时,只有与修改的内容相关的文件需要重新编译,而不是重新编译模块的相关的全部文件。
模块映射到编程语言的对应的定义结构。例如,C++,C#和VB,模块映射到命名空间。Java则是package。
Ice ModuleIce模块(Ice Module)
Ice的运行时API,除了少部分的语言特定的调用不能在Ice中表示以外,所有的都定义在Ice模块中。换句话说,大部分的Ice API是完全用Slice定义表达的。这样做的好处就是一个单独的Slice定义就可以有效地定义适用所有支持语言的Ice运行时的API。
==============================================================ICE:Slice语言(四)--基本类型
Slice提供了一些内置的基本类型,如下所示,括号中的数字表示指数:
类型 取值范围 大小
bool false / true 没指定
byte -128 to 127(0 - 255) >=8bits
short -2(15) to 2(15) - 1 >=16bits
int -2(31) to 2(31) - 1 >=32bits
long -2(63) to 2(63) - 1 >=64bits
float IEEE single标准 >=32bits
double IEEE double标准 >=64bits
string 所有的Unicode字符, 除了所有位为0的字符
变长
其中的byte类型的最大取值范围根据实际的语言决定。
当数据类型在服务器和客户端之间传递时,除了byte类型之外的数据类型都根据实际情况在变化。例如:一个long类型的值在从一台little-endian机器传递到bit-endian机器时会发生位变换。类似的,string在从EBCDIC发往ASCII时也是发生ibanhua的,也许string的字符的尺寸也发生了变化,因为不是所有的机器都使用8位的字符。实际上,这些变化对于程序员来说都是透明的,而且会严格按照需要来变化。
整数类形(integer types)
Slice提供了如下的整数类型:
short,16位
int,32位
long,64位
不过,这些类型在某些机器上会映射到更宽的原生类型。需要注意的是那些无符号类型Slice并没有提供。因为无符号类型影射到那些没有原生的无符号类型的语言相当困难,例如Java。
浮点数类型(floating-point types)
浮点数类型遵循IEEE的规范。如果一个实现语言么有支持IEEE的浮点数格式,Ice运行时会将浮点数值转换为原生浮点数表示。
字符串(strings)
Slice字符串使用Unicode字符集。唯一的不能出现在字符串中的字符就是零字符。
Slice没有null字符串的概念。这是因为null字符串很难映射到不直接支持null字符串概念的语言上,例如Python。不要设计依靠一个null字符串来表示“不在那里”的语义的接口。如果你需要表示可选的串,可以通过使用类,字符串的序列,或者一个空的字符串来表示null字符串。
布尔类型(booleans)
布尔类型的值只能由false和true。如果语言映射时有原生布尔类型,语言映射就会使用该类型。
Byte类型(bytes)
Slice定义byte是一个至少8位的,在地址空间中传递时保证不会发生变化的类型。保证不发生变化就允许交换二进制数据,而这些数据不会被篆改。其他的Slice类型都会在传递过程中会被改变表达形式。
相关推荐
在ICE中,`slice`是一种接口定义语言,类似于IDL(Interface Definition Language),用于描述服务接口和数据类型。`slice2java`是ICE提供的一个工具,它可以将`slice`文件转换为Java语言的接口和数据类型实现。 在...
“slice2java”是Ice工具集的一部分,用于将 Slice 语言编写的接口定义转换为 Java 代码。Slice是一种接口定义语言,类似于IDL(Interface Definition Language),用于描述服务的接口和数据类型。通过slice2java,...
zeroc ice微服务架构用户手册 zeroc ice是一款功能强大且灵活的微服务架构解决方案,旨在提供一种简洁、可靠、可扩展的...*灵活性:Ice 架构模型具有高度的灵活性,允许开发者根据不同的应用场景选择合适的架构模型。
- **跨语言支持**:Ice提供了更多编程语言的支持,包括Java、C++、Python等。 - **性能**:Ice通常比CORBA表现出更好的性能。 #### 三、Hello World应用开发 - **Slice定义**:Slice是Ice的一种接口描述语言,...
Slice iOS SDK 通过开发人员可以访问用户的在线购买历史记录。 它通过处理电子邮件回执来工作,并且涉及商户和产品类别。 可用的资源包括订单,物料,装运等。 SliceSDK是在iOS上使用Slice API的便捷框架。 注意...
3. **接口定义语言(IDL)**:ICE使用称为“Slice”的接口定义语言来描述服务接口, Slice文件可以被编译成不同语言的客户端和服务器端代码。 4. **自动类型映射**:ICE支持基本数据类型和自定义类型的自动序列化和...
- **Slice 语言**:ICE 使用 Slice 语言来定义接口和服务,这是一种类似于 IDL 的语言,用于描述分布式系统中的数据类型和服务接口。 - **Slice 基本类型**:包括整型、浮点型、字符串等基础数据类型。 - **用户...
Slice 是 Ice 的接口定义语言,用于描述对象的接口、类型和结构。通过 Slice 编译器,可以将 Slice 定义转换为各种编程语言的代码,方便开发者在不同平台上实现通信。 总的来说,`Ice::Application` 是 Ice 框架中...
1. **提供统一的中间件平台**:ICE为不同的平台提供了统一的接口和编程模型,使得开发者可以在不同平台上无缝地编写代码。 2. **支持多种通信模式**:ICE支持多种数据交换方式,如异步通信、流式传输以及事件通知...
1. **Slice语言**:Slice是一种简洁的语言,用于定义接口、类型和异常,是Ice的基石。它允许开发者以一种平台和语言无关的方式描述数据结构和接口。 2. **类型系统**:Slice提供了丰富的类型系统,包括基本类型、...
- 通过学习Slice语言和Ice的核心概念,开发者可以更好地利用Ice来构建复杂的分布式系统。 以上内容涵盖了Ice 1.3.0版本的核心知识点,旨在帮助读者深入了解Ice的架构、设计理念及其在分布式计算领域的应用。
- **跨语言支持**:Ice支持包括C++、Java在内的多种主流编程语言。 - **跨平台性**:能够在不同的操作系统上运行,如Windows、Linux等。 - **高性能**:利用高效的通信协议实现快速的数据交换。 - **可扩展性**:...
- **可移植性**:Ice 支持多种操作系统和编程语言,便于跨平台开发。 - **安全性**:支持 SSL/TLS 加密传输,确保数据安全。 - **可扩展性**:松耦合的服务架构易于维护和扩展。 #### 知识点九:Ice 源码包中的第三...
- **Ice Slice 编译器**: 将 Ice IDL 文件转换为特定编程语言的代码。 - **Ice 工具**: 包括配置管理、服务发现等功能的工具集。 ##### 2.2 Ice 服务 Ice 支持一系列的服务,如数据持久化、安全性、日志记录和监控...
2. **编译器支持**:Ice的编译器slice2cpp、slice2java等能够生成特定于语言的代码,而CORBA的编译器则通常生成通用的IDL代码。 3. **架构灵活性**:Ice的架构更为灵活,支持更多的定制化需求,而CORBA的架构较为...
_slice语言_是ICE的核心部分,文档详细介绍了Slice语言的编译过程、源文件结构、词法规则等。Slice语言支持多种类型定义,包括基本的Slice类型、用户定义类型、接口、操作和异常等。它还提供了对模块和名字空间的...
接下来,使用ICE提供的IDL编译器`slice2cpp`对上述IDL文件进行编译,生成C++代码,这些代码包括客户端和服务端所需的代理和骨架类。 ##### 服务端实现 服务端的实现非常简单,主要涉及到对`Printer`接口的实现。...
- **1.2.1 客户端和服务器**:ICE支持典型的客户端/服务器模型,其中客户端发起请求,服务器处理请求并返回结果。 - **1.2.2 Ice核心**:这是ICE的基础组件,负责处理网络通信和对象定位等核心任务。 - **1.2.3 Ice ...