- 内容提要
- 序 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.3 状态:含义与可操作性完全明确的数据(值)
在x这个集合中的Sx只是数据,而并不应当包括Sx的操作。这是考虑到Sx本身不能再有任何的依赖——包括时间,因此它必须是一个含义与可操作性都非常明确的状态值。若使Sx与其操作都存在于同一个集合中,则它们必须只能是一个可分布系统的“数据全集x2”一部分,并且该系统的数据集x2中也就存在相对应的Sx2。
作出这一点限制才可以使 x 作为一个独立概念加以考察,并且可以将“数据”与“数据的状态”在概念上有效地区分开来。由于任何状态
- 本身也是数据
- 也能被作为数据x2’复合到一个“数据全集x2”中去
- 也能存有其确定的操作*x2“*
因此我们才可以把状态作为一个数据,在程序中传递它、处理它,而不是仅视其为一个惟只绑定在“数据全集x”中的状态。
作为“状态”本身,Sx在现在或将来,或是在“数据全集”的任意一个持有者手中,都必须以及必然是 含义与可操作性7 完全明确的。例如,它仅仅是一个“0、1”状态,它的操作仅有唯一的“逻辑非”操作。当然,状态可能更为复杂,但只要有与之相应的、明确的、完整的逻辑,并且这些逻辑可以独立于这一状态,可以由不同的持有者实现,我们都可以将这样的状态称为Sx。
综上,数据依赖在概念上只表明多个逻辑作用于同一个数据,它最终将被表达为面向{x’,x“,Sx}的操作,其中{x’, x”}表明被依赖的数据与其可确定的行为,而{Sx}表明一个有明确 含义与可操作性 的状态。
但我们并没有限制“多个逻辑”之间的时序关系。也就是说,数据依赖只用“状态”来表明:多个逻辑与数据的全集x都存在关系,但并不表明是一个并行系统下的关系,或是一个串行系统下的关系。例如,“(对同一数据的)多读单写”显然是数据依赖的,但在多读时多个逻辑之间是并行的,而在单写时它们却是串行的。
在我们的定义中,所谓“并发多任务”系统,是面向数据依赖的一个实现。例如,上述“多读单写”系统是可以依赖针对于某个状态的一组逻辑来实现的。更确切地说,所谓“并发模型”,其实就是 8 :
- 对上述状态定义一个操作集,并
- 在多个逻辑中实现该操作集。
- 很遗憾我无法证实这一点,但就目前的实践来说,这总是成立的。 ↩
- 我们已经提到多个与“依赖”相关的概念。若我们只是单独使用“依赖”,则表明它是自然语言中的、表明多个事或物之间存有依存关系的含义。当我们使用“时序依赖”时,它是包括 逻辑的 与 数据的 时序依赖两种情况。当我们使用“数据依赖”时,我们是用这个概念来统一了上述两种时序依赖。 ↩
- 这个示例基于 Peter Van Roy 和 Seif Hardi 在《计算机编程的概念、技术和模型》(MIT Press,2004)一书中对“可观测的非确定性”(Observable nondeterminism)的讨论,原示例使用 Oz 语言。 ↩
- 若“x的全集”是一个无限的、增量的数据集合,那么我们这里的规则就未必适用了。对于这种情况,通常有两种处理方案:其一,若该增量具有唯一的起始或标识,则可以以之作为 数据 全集的映射,并进一步用它来映射其后的状态;其二,若该增量是持续发生的,则它应当被抽象为一个与时间相关的函数,因而任意逻辑在任意时刻都只可能持有该函数运行结果的一个片断——换言之,它是不可能被持有全集的。 ↩
- 在对“x的全集”这一概念的实现上,若语言中存在变量,则 变量 本身即可被理解为上述的“具有唯一的起始或标识”的无限增量数据,这是它适用于上述讨论的根本原因。若语言中不存在变量,则每一个数据——在它被唯一持有时——就是全集。其三, 闭包 这一概念的提出,在于无论数据在时间线上映像为何,在任意时刻闭包总代表着数据全集。 ↩
- 此前我们已经讨论过“计算的不确定性是对机器计算是否有价值的终极拷问”这一问题。它既是我们能通过“计算机语言”进行机器计算的基础,也是使得我们能够正确地将这样的计算应用于一个“数据全集”的基础。 ↩
- 我们稍后会再来讨论这一限制的实际含义。 ↩
- 并发的性能将取决于该操作集的效率,而并行的实质在于去除这个操作集。 ↩
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论