from:http://duckweeds.blog.sohu.com/95754129.html

Nonmutating 操作

有一些操作,例如上面代码中的getTime操作,这个操作不会修改所操作的对象的值。它们在概念上等效于C plus plus的const 成员函数。你可以如下的指出这样的操作:

        interface Clock        {                nonmutating TimeOfDay getTime();                void setTime(TimeOfDay time);        };

nonmutating关键字指出了getTime操作不会修改它所操作的对象的状态。这样使用有两个原因:

  • 语言映射可以关于操作行为的附加知识的好处。例如:对于C plus plus来说,nonmutating操作映射到const成员函数。
  • 当得知一个操作不会修改对象的状态,则允许Ice运行时更积极的进行错误恢复。特别的,Ice会保证操作调用的最多一次语义。

对于普通的操作,Ice运行时对于如何处理错误是保守的。例如,如果一个客户端发送一个操作调用到服务器,然后丢失了连接,对于客户端的 Ice运行时来说,没有办法知道调用是否成功。这就意味着,运行时不能通过尝试重新连接和再次发送请求来恢复错误,因为这可能第二次引发操作以及违背了最多一次语义。运行时没有选择,只能把错误报告给应用。对于nonmutating操作,换句话说,客户端的运行时可以尝试再次连接和安全的二次送出失败的请求。如果第二次发送能够到达服务器,那么万事OK。只有第二次再次失败,错误才会报告给应用(错误重试的次数可以在Ice的配置文件中配置)。

Idempotent操作

我们可以更进一步去修改上面的Clock接口的定义,从而可以让setTime操作是idempotent的:

        interface Clock        {                nonmutating TimeOfDay getTime();                idempotent void setTime(TimeOfDay time);        };

对某一个操作进行两次成功的操作,其结果都一样,就像只调用了一次一样,那么这个操作就是idempotent操作。例如,x = 1; 是一个idempotent操作因为不管执行了一次还是两次,x的值都是1。换句话说,x += 1;就不是一个idempotent操作,因为它执行了两次后,结果不同了。

idempotent关键字指出了一个操作能够安全的执行多次。同nonmutating操作一样,Ice运行时使用idempotent来达到更积极地错误恢复。

一个操作只能是nonmutating或idempotent,不能两个都是。(nonmutating隐含了idempotent)

ice 的 Nonmutating 和 Idempotent相关推荐

  1. The Ice::Current Object

    The Ice::Current Object 服务器端Servant骨架方法(skeleton operation)都有一个Ice::Current类型的参数,这个对象定义如下: module Ic ...

  2. ICE之Slice语言

    Slice 语言定义 文档中对于slice的定义 在这里,我们提供Slice语言. Slice(Specification Language for Ice)是一种将对象接口与其实现分离的基本抽象机制 ...

  3. ICE BOX 配置,使用----第一篇

    一 理论部分 (1) 为什么要使用icebox? icebox server代替了通常的server. icebox是为了方便集中管理多个ice服务而建立的. 它通过使用icebox服务器,把ice服 ...

  4. 英特尔第三代 Ice Lake 发布正面与 AMD EPYC PK,结果令人大跌眼镜!

    作者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导读:传闻已久的第三代英特尔至强可扩展处理器,终于在北京风光最美的4月份发布了. 北京时间4月7日晚,在著名的网红打卡地,百年老首 ...

  5. ICE专题:ICE起步

    ICE初步 最早开始接触ICE是在2005,3月份,当时一个朋友向另一个正打算研究corba的朋友强烈的推荐了ICE. 参考:http://www.zeroc.com/ 1.什么是ICE? ICE(i ...

  6. 模型的可解释性:部分依赖图PDP和个体条件期望图ICE

    来源:Deephub Imba 本文约1800字,建议阅读5分钟 本文我们通过一个简单据集的回归示例了解了部分依赖图 (PDP) 和个体条件期望 (ICE) 图是什么,以及如何在 Python 中制作 ...

  7. 配置C++和C#开发ICE环境

    2019独角兽企业重金招聘Python工程师标准>>> C++配置环境 1.设置编译工具路径和配置编译命令: #编译命令,如果有多个文件就执行多次slice2cpp.exe命令 se ...

  8. Ice “Hello World”的实现

    2019独角兽企业重金招聘Python工程师标准>>> Ice简介: Ice (Internet Communications Engine),是一种面向对象的中间件平台,既然是平台 ...

  9. ZeroC ICE java异步实现方式(ami/amd)

    首先说说ami 和amd 的区别(以下为个人见解,仅供参考.如有疑问欢迎提出来) ami (异步方法调用): 仅仅基于ice 的同步方式扩展了异步的扩展方式,其他理念改动不大,使用起来好理解,但是服务 ...

最新文章

  1. SDP 协议分析 http://www.cnblogs.com/qingquan/archive/2011/08/02/2125585.html
  2. Apache+MySQL+PHP安装指南
  3. win7 无法复制粘贴
  4. Android5.0新特性:全新的动画
  5. Python基础概念_11_标准库
  6. 在Windows上安装Elasticsearch 5.0
  7. treegrid 如何获取getchanges inserted_如何避开Vue性能优化之路的荆棘?
  8. Spring Http Invoke 请求过程图
  9. 以下()不是python的数值运算操作符_python运算符与数据类型
  10. 【janino】janino 加载自定义函数报错 CompileException xxx cannot be invoked in static context
  11. C# ActiveX开发部署更新
  12. 如何查看linux的版本?
  13. c#中params关键字应用
  14. python培训班靠谱吗-Python培训机构就业靠不靠谱?
  15. 安卓q bubbles_Android Q Bubbles
  16. OSG/TextureCubeMap 立方贴图天空盒示例
  17. php网站设计国内外研究状况,毕业论文中的国内外研究现状怎么写啊
  18. 《CSS揭秘》-总结47个Css技巧(一):常用的背景与边框技巧
  19. 你真的知道如何选择内存条吗?
  20. vue RSA加密算法(jsencrypt)的使用

热门文章

  1. SIFT算法原理(2)-极值点的精确定位
  2. 【视觉-单目三维重建-理论篇】单目视觉三维重建----论文调研1
  3. JVAV SE冒泡排序
  4. 软件开发中,做产品与做项目有什么区别?
  5. Python之Turtle库绘制简单图形
  6. MATLAB 将RGB颜色空间转为HSI颜色空间、LAB颜色空间 原理及程序
  7. Arduino白泽四足机器人——matlab逆运动学求解
  8. 小游戏“程序猿大战产品*那啥”
  9. 5.12 按照多个条件进行组合排序 [原创Excel教程]
  10. ACM-5元和10元的经典问题