返回介绍

5.3 方向 1:计算要素的结构化

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

第一种结构化方向是指:通过在 计算要素 上的结构化来 增强计算能力 。在这一方向上的努力,将我们的开发规模推进到 程序 (program)这一等级。我所见过的,对于程序的最初、最正确和最直观的定义为:

a + s(d)

即,“算法 + 数据结构 = 程序” 1

Algorithm + Structured(Data)

但是这里的结构(structure)主要作用于数据(data),所描述的是对算法(algorithms) 中所用数据的抽象。而在更大的计算规模中,计算对象——数据的复杂性固然是一个问题,而计算本身的复杂性也是一个问题。因此对于a+s(d)这个定义来说,Dijkstra 在《结构程序设计》中的描述更为完善,即:

s(f) + s(d)

显而易见,后者用 计算的结构化 s(f)来替代了算法 a。原意为 2 :对于一个计算过程,(通过提炼)抽去每次计算所处理的特殊值,余下的不变的东西就是这个“算法”自身。由于对过程中的每一步都进行了“动态提炼(算法)和静态提炼(数据结构)”,因此这里的提炼结果(结构s)在计算过程f和数据d上是匹配的、共生的,即 3

s ( f ( d ) )

其三,程序代码本身在组织上也还存在复杂性的问题。对于这第三个问题,Dijkstra 以“组织和编排程序”为主题加以了讨论。不过在具体背景之下,他所讨论的仅仅是对“函数/过程” 4 进行结构化地组织与编排。

这里需要明确一下在该背景下的 函数 这一概念。在上一小节的 计算语言 中,函数是与数学公理类同的、面向“数”或“数据”的一个计算过程。而在本小节所讨论的程序(program)这个规模之下(以及该规模下的语言之中),函数是算法或算法中的一个子步骤的代名词。在 program 这一语境下的函数,与确定的结构有关,既包括计算逻辑的结构,也包括计算数据的结构,是

s ( f ( d ) )

中三者合一的概念。如同《结构程序设计》用 “珍珠”和“项链” 来做的比喻一样,从 珍珠 的角度来看,是可以在整个程序中被替代、被优选的 5 ;从 项链 的角度来看,可以是暂时不完整的 6 ;从 串起项链 这件事上来看,顺序是确定的 7

我将这一等级上的语言统称为 “编程语言”(programming languages) 。我使用这个具有歧义的称谓的原因在于 8 :这一类语言仍然是在 计算要素 上加以增强——尽管对于函数来说也存在着代码的组织与编排上的增强,但归根结底是针对计算要素的,并且是在该抽象上的自然延伸。

在这一阶段中,计算机主要在专业领域中使用,计算量的增加是程序规模变化的主要原因,同时又要求对目标系统有足够的抽象表达能力,因此在数据抽象程度变高的同时仍然强调语言具有完备的计算能力。我们可以将操作系统、网络系统、通信调度、分布式运算环境等绝大多数基础系统的核心部分,以及其中大量利用系统特性的工具软件,都归于这类语言所面向的开发规模。其主要特点是:大量的计算、数据抽象与计算环境相关,主要算法可以在不同的软硬件环境中通用或重现,并且通常用户主要入口是操作系统的约定或直接的硬件系统界面。

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

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

发布评论

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