`
Breese
  • 浏览: 61434 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ICE:slice语言常识整理

阅读更多

==========================================================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类型都会在传递过程中会被改变表达形式。

分享到:
评论

相关推荐

    slice-ios:Slice iOS SDK

    Slice iOS SDK 通过开发人员可以访问用户的在线购买历史记录。 它通过处理电子邮件回执来工作,并且涉及商户和产品类别。 可用的资源包括订单,物料,装运等。 SliceSDK是在iOS上使用Slice API的便捷框架。 注意...

    npm-slice2js:Slice到JavaScript编译器的Npm软件包

    显示Ice版本。 -DNAME 将NAME定义为1。 -DNAME = DEF 将NAME定义为DEF。 -UNAME 删除NAME的所有定义。 -IDIR 将DIR添加到Slice文件的包含路径。 -E 在标准输出上打印预处理器输出。 --stdout 将生成的...

    Zeroc ICE中间件slice2java的ant脚本

    NULL 博文链接:https://zhaoningbo.iteye.com/blog/1071365

    Python:slice与indices的用法

    今天小编就为大家分享一篇Python:slice与indices的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    slice:slice包对Go slices进行排序

    片 这个软件包是Go 1.8的sort.Slice在将其添加到标准库之前先进行sort.Slice 。 不推荐使用:任何新代码都应改用标准库:

    ICE分布式程序设计中文版

    第 4 章 Slice 语言 53 4.1 本章综 53 4.2 引言 53 4.3 编译 54 4.4 源文件 57 4.5 词法规则 59 4.6 基本的 Slice 类型 62 4.7 用户定义的类型 63 4.8 接口、操作,以及异常 70 4.9 类 92 4.10 提前声明 106 4.11 ...

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

    NULL 博文链接:https://zhaoningbo.iteye.com/blog/1135564

    slice sampler_抽样方法_r语言slice_SLICESAMPLER_mcmc_slice_

    用r语言进行简单的切片mcmc抽样,切片抽样属于马氏链蒙特卡洛方法

    ICE客户端与服务端通信Demo

    平台编译环境:VS2017 ICE版本:3.7.7 ICEbuilder:5.0.9 源码中有两套程序: Server:启动服务器,等待连接 。连接后可双方通信 Client:连接服务器,与服务器通讯。...Slice: 手写几个接口即可。

    ice:全面的RPC框架,支持C ++,C#,Java,JavaScript,Python等

    高性能的二进制协议支持多种编程语言和平台易于使用且类型安全的API,具有以编程语言中立的IDL Slice定义的自己的接口和类型通过利用平台的本机SSL / TLS堆栈来支持安全的加密通信熟悉的面向对象的编程模型,能够将...

    Ice 分布式程序设计

    第 4 章 Slice 语言 第 5 章 一个简单文件系统的 Slice 定义 第 6 章 客户端的 Slice-to-C++ 映射 第 7 章开发 C++ 文件系统客户 第 8 章 客户端的 Slice-to-Java 映射 第 9 章开发 Java 文件系统客户 第 10 章 ...

    Slice-docs:Slice项目的文档

    切片文档 Slice项目的文档 执照 Source Foundry Authors的分已获得许可

    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" , ( ) ...

    slice-firmware:Slice的BCM270x固件相关资料

    切片固件Slice的BCM270x固件相关资料固件d-blob.bin Slice需要在FAT(引导)分区的根目录上具有正确的dt-blob.bin,才能正确设置初始引脚状态和时钟。 使用compile.sh脚本从slice-dt-blob.dts生成所需的dt-blob.bin

    slice函数的用法 之不错的应用

    代码如下:slice函数的用法:slice(a, b) 截取 数组 a 到 b 之间的元素组成新数组 截取到的元素为 a, a+1, …, b-1 删除数组中元素a到元素b的方法是: 合并元素a之前的元素与元素b起的元素; function...

    Go语言中slice的用法实例分析

    本文实例讲述了Go语言中slice的用法。分享给大家供大家参考。具体如下: slice 指向数组的值,并且同时包含了长度信息。 []T 是一个元素类型为 T 的 slice。 代码如下:package main import “fmt” func main() { ...

    表单元素组件Slice.zip

    Slice 包含一组优雅的表单元素组件。 标签:Slice CSS框架

    ZeroC Ice 3.7 手册

    Ice通过与编程语言无关的中立语言Slice(Specification Language fro Ice)来描述服务的接口,从而达到对象接口与其实现想分离的目的。 目前Ice平台支持客户端API的语言有C++、.NET、Java、Python、Object-C、...

Global site tag (gtag.js) - Google Analytics