第二版前言

软件是否可能不同于其他任何事物,它注定要被抛弃:其全部意义就在于始终将它视为一个肥皂泡?

Alan J. Perlis

本书中的材料自 1980 年以来一直是麻省理工学院计算机科学入门课程的基础。第一版出版时,我们已经教授这些材料四年了,而直到第二版问世又过去了十二年。我们很高兴我们的工作被广泛采纳并融入其他教材。我们看到我们的学生将本书中的思想和程序作为新的计算机系统和语言的核心来构建。一个古老的塔木德双关语在字面意义上实现了:我们的学生成了我们的建造者。我们很幸运拥有如此能干的学生和如此有成就的建造者。

在准备本版时,我们采纳了数百条来自我们自身教学经验和 MIT 及其他地方同事建议的澄清说明。我们重新设计了书中大部分主要的编程系统,包括通用算术系统、解释器、寄存器计算机模拟器和编译器;我们重写了所有程序示例,以确保任何符合 IEEE Scheme 标准(IEEE 1990)的 Scheme 实现都能运行这些代码。

本版强调几个新的主题。其中最重要的是处理计算模型中时间问题的不同方法所扮演的核心角色:带状态的对象、并发编程、函数式编程、惰性求值以及非确定性编程。我们加入了关于并发和非确定性的新章节,并试图将这个主题贯穿全书。

本书第一版紧密遵循了我们 MIT 一个学期的课程大纲。第二版加入了所有新材料后,不可能在一个学期内涵盖所有内容,因此教师需要有所取舍。在我们自己的教学中,我们有时会跳过逻辑程序设计部分(第 4.4 节),让学生使用寄存器计算机模拟器但不涵盖其实现(第 5.2 节),并且只对编译器做粗略概述(第 5.5 节)。即便如此,这仍然是一门强度很高的课程。一些教师可能只想涵盖前三四章,将其他材料留到后续课程中。

万维网站点 mitpress.mit.edu/sicp 为本书用户提供支持。 其中包括书中的程序、 示例编程作业、补充材料, 以及可下载的 Scheme(Lisp 方言)实现。