返回介绍

16.3 状态:含义与可操作性完全明确的数据(值)

发布于 2024-12-15 23:01:51 字数 2975 浏览 0 评论 0 收藏 0

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

  • 对上述状态定义一个操作集,并
  • 在多个逻辑中实现该操作集。
  1. 很遗憾我无法证实这一点,但就目前的实践来说,这总是成立的。
  2. 我们已经提到多个与“依赖”相关的概念。若我们只是单独使用“依赖”,则表明它是自然语言中的、表明多个事或物之间存有依存关系的含义。当我们使用“时序依赖”时,它是包括 逻辑的数据的 时序依赖两种情况。当我们使用“数据依赖”时,我们是用这个概念来统一了上述两种时序依赖。
  3. 这个示例基于 Peter Van Roy 和 Seif Hardi 在《计算机编程的概念、技术和模型》(MIT Press,2004)一书中对“可观测的非确定性”(Observable nondeterminism)的讨论,原示例使用 Oz 语言。
  4. 若“x的全集”是一个无限的、增量的数据集合,那么我们这里的规则就未必适用了。对于这种情况,通常有两种处理方案:其一,若该增量具有唯一的起始或标识,则可以以之作为 数据 全集的映射,并进一步用它来映射其后的状态;其二,若该增量是持续发生的,则它应当被抽象为一个与时间相关的函数,因而任意逻辑在任意时刻都只可能持有该函数运行结果的一个片断——换言之,它是不可能被持有全集的。
  5. 在对“x的全集”这一概念的实现上,若语言中存在变量,则 变量 本身即可被理解为上述的“具有唯一的起始或标识”的无限增量数据,这是它适用于上述讨论的根本原因。若语言中不存在变量,则每一个数据——在它被唯一持有时——就是全集。其三, 闭包 这一概念的提出,在于无论数据在时间线上映像为何,在任意时刻闭包总代表着数据全集。
  6. 此前我们已经讨论过“计算的不确定性是对机器计算是否有价值的终极拷问”这一问题。它既是我们能通过“计算机语言”进行机器计算的基础,也是使得我们能够正确地将这样的计算应用于一个“数据全集”的基础。
  7. 我们稍后会再来讨论这一限制的实际含义。
  8. 并发的性能将取决于该操作集的效率,而并行的实质在于去除这个操作集。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文