- 内容提要
- 序 1:程序里的世界
- 序 2:最后一层表象
- 关于本书
- 致谢
- 引言:简单的本源
- 篇一:计算系统
- 第 1 章 数,以及对数据的性质的思考
- 第 2 章 逻辑
- 第 3 章 抽象
- 篇二:语言及其面临的系统
- 第 4 章 语言
- 第 5 章 从功能到系统
- 篇三:程序设计的核心思想
- 第 6 章 数据结构:顺序存储
- 第 7 章 数据结构:散列存储
- 第 8 章 执行体与它在执行过程中的环境
- 第 9 章 语法树及其执行过程
- 第 10 章 对象系统:表达、使用与模式
- 篇四:应用开发基础
- 第 11 章 应用开发的背景与成因
- 第 12 章 应用开发技术
- 第 13 章 开发视角下的工程问题
- 第 14 章 应用程序设计语言的复杂性
- 篇五:系统的基础部件
- 第 15 章 分布
- 第 16 章 依赖
- 第 17 章 消息
- 第 18 章 系统
- 篇六:系统的基本组织方法与原理
- 第 19 章 行为的组织及其抽象
- 第 20 章 领域间的组织
- 附一:主要编程范式 及其语言特性关系
- 附二:继承与混合,略谈系统的构建方式
- 附三:像大师们一样思考——从 UML 何时死掉 谈起
- 附四:VCL 已死,RAD 已死
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
16.2 数据(x) 的全集 = 数据(x’) + 操作(x“) + 状态(Sx)
一个简单的数据依赖的模型可以是这样的 3 :
1 2 3 4 5 6 7 |
|
在这个模型中,若 foo_1()
与 foo_2()
是分布的,我们最终将不知道x如何分布,因此它们都必须使用数据x的全集。
如前所述,我们承认这种状况必然存在,无论它是发生于 foo()
函数的循环展开,还是用于解决 foo_1,…,foo_N
之间逻辑的时序依赖问题。我们的问题仅仅在于:如何让 foo_1
,…, foo_N
都 持有这个数据x 。
我们必须再次确认“x的全集”的含义。若“x的全集”是一个有限的数据集合 4 5 ,例如某个内存块或者某个对象,那么“持有这个数据x”意味着对这个x的全集的任意操作。这样的全集应当包括三个信息:数据、数据的操作以及数据的状态。
其一,x 包括数据x’。显然,x应当包括x’,它必然是可计算数据的一部分。尽管x’ 在概念上能够指代可计算数据的全体,但在应用中仅是其部分,这就如同 变量 在概念上指代任何数据,但在具体的代码中只表达确定数据。
其二,x包括上述数据集合x’的所有已知操作x“。对于某个确定的时间(所谓“已知”,便是与时间相关的),x’具有确定的操作x”。这基于两条理由:首先,使得x’在某一时间的操作具有不确定性——也就是说,既能够应用某个操作,又不可应用该操作——的逻辑是不存在的 6 ;其次,若存在在将来可能发生于x’的其他操作,那么这些操作与x’也将构成其他的数据集合。
其三,x包括指示它自身的状态Sx。Sx是x之于时间的信息,这意味着x在一个持续过程中可以被分别处理,这个信息既可以看做是x之于时间的依赖,也可以看做是x之于“某时的处理者”的依赖。
综上,x必须是{x’, *x“, Sx*}的全集。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论