Morning Edition
星期日, 二月 15, 2026

折鸦夜明け前

我们的同志在困难的时候,要看到成绩,要看到光明,要提高我们的勇气。

SICP 第二章(构造数据抽象)

复合数据

在实际的程序设计中(模拟数学或现实系统), 操作(过程)要应用到的数据往往不是一个单独的基本类型数据, 而是多个基本类型数据复合起来的: 例如分数是由分子和分母确定起来的, 单一的分子和分母都不能称为分数. 而将分子和分母以某种方式复合起来比单独管理分子和分母具有更强的可读性, 减少了编码中的精力消耗; 同时加强分子和分母之间的关系(分子和分母的关系应当强于这两个符号之于别的数据的关系)也符合某种(哲学上的)道理.

为此, 我们需要构造一种抽象使得这两个数据被复合起来:

  • 首先要有构造函数, 将这分子和分母复合为另一个新的数据
  • 然后还要有选择函数, 因为在实际操作中我们需要操作分子和分母本身(来模拟分数的运算)而不是分数本身
  • 最后, 分子和分母及其操作应当符合某些规则(即数学上分数运算上的规则)

这就是复合数据的需求: 将数据定义为一组适当的选择函数和构造函数, 以及为了使得这些过程成为一套合法表示, 它们就必须满足一组特定的条件.

SICP 第一章(构造过程抽象)

程序设计需要考虑的基本元素

  1. 基本的表达形式: 基本的数据表达基本的过程表达
  2. 组合的方法: 将基本表达组合起来构成复合的元素, 如 Lisp 的组合式
  3. 抽象的方法: 为复合对象命名, 从一个新的抽象层次操作非基本单元

在 lisp (SICP 使用 scheme 方言) 中有如下体现:

操作系统的 libc 支持

操作系统的 libc 支持

../_images/app-software-stack.png

之前 我们说到系统从其功能实现上的目的是: 管理各种硬件资源,实现隔离并发与虚拟化. 但是站在一般用户的角度来说, 一个操作系统要有良好的生态, 支持应用程序才能被广泛使用. 而应用程序是由编程语言开发的, 这就要求操作系统能够支持一些语言(特别对于C语言)的标准库.