《程序设计语言——概念和结构》译者序

IEEE/ACM1991教程将“程序设计语言”课程列为计算机及其相关专业本科必修课程。在IEEE/ACM联合拟定的2001教程草案中,也将“程序设计语言”列为教育计划的14个基本知识领域之一,并特别强调了它的重要性。本书就是国外比较成功的一本讨论程序设计语言的教科书,已在一些学校使用多年(这里是第二版)。本书作者是贝尔实验室计算科学研究中心主任,在程序设计语言、编译技术等方面颇有建树,在程序设计语言的教学方面也有丰富经验。本书取材比较合理,既讨论了许多实际技术问题,以帮助人们认识程序语言的方方面面,也适当地介绍了一些问题的理论基础。书的内容组织也比较合理。本书适合作为计算机及其相关专业本科高年级的教材或教学参考书,或作为有关研究生的基础课程教材或参考书,也适合其他热爱计算机科学技术、希望进一步提升自己的计算机基础和能力的人阅读参考。本书的学习基础是学过用过一种或几种程序语言(最好包括Pascal/C/C++),有一定程序设计经验,并对数据结构等计算机基础知识有所理解。

本书以介绍常规的命令式语言及其面向对象的发展为重点,讨论了常规语言各方面的基本问题,包括语言描述;控制结构、数据类型以及它们的实现机理;过程抽象及其实现;数据抽象和面向对象的有关特征及其实现;并行机制的各种问题。这里也用相当的篇幅介绍了程序设计的其他范型,主要是函数式程序设计、逻辑程序设计,以及支持这些范型的语言。学习了解这些知识,对于计算机及其相关专业学生的知识完整性也是非常重要的。从这些非常规的范型中可以看到许多很有价值的思想。实际上,无论是过去、现在、还是将来,其他程序设计范型的许多有价值的思想都已经/正在/将以各种形式被常规程序设计实践所接纳和使用。了解在更大范围里的程序设计实践情况,对于在计算机领域工作中的创新思维也是极端重要的,无论是从事实践性工作还是研究性工作。

本书还用了一定篇幅,简略讨论了与程序语言有关的一些理论问题。包括程序语言的语法、语义模型、类型等等。虽然大部分计算机领域的工作者不会去从事理论研究工作,但也应该看到理论对于实际工作的重要作用。按我的个人观点,理论至少可以帮助人擦亮眼睛,使我们能看清楚那些隐藏在繁杂实际细节背后的根本原因,使我们在从事实践性的工作时心里有底。对理论问题的重视不够,至少说,已经在一定程度上阻碍了我国计算机事业的发展,阻碍了许多很有潜力的个人的发展。虽然改变计算机教育的现状,推动我国计算机事业的发展不是一朝一夕之事,但是,每个立志投身于这一领域的个人还是能尽量为自己的未来前途多做一些事情。加强个人的理论素养就是最基本的问题之一。本书提供了有关方面的一些基本知识可以作为有关学习的起点。

对于大部分计算机工作者、大部分软件人员、大部分计算机及其相关专业的学生而言,程序设计语言就是我们所面对的计算机。因此,理解计算机,掌握计算机技术的一个重要方面就是理解和掌握程序设计语言。程序语言规定了我们在描述要解决的问题时所能使用的手段,规定了这种描述的形式及其意义。在另一个层次上,一种特定的程序语言还对我们在解决问题时可能采用的技术和方式限定了一个大的边界。

目前世界上流行的程序语言有许多种,这种情况将来也不会改变,因为这是由我们所面临的需要解决的计算问题的五彩缤纷所决定的。任何语言都不可能是最完美的工具,不可能在处理任何问题时都是最锐利的宝剑。每种语言都有其最强的地方,也有其薄弱之处。当我们面对一项具体工作时,即使有各种环境因素的制约,也还是应该尽可能地去选择最适合这个问题的语言。一个计算机工作者需要理解掌握多种程序设计语言,只有这样,在遇到具体问题时才可能做出更合理的选择。为此,我们就需要学习多种程序设计语言,需要在实际工作中,针对具体问题,对各种可能用的语言进行评价和比较。而要能正确地做这种评价比较,就需要有对于语言的更深入理解。

各种常规语言有许多共同点,也有许多差异。许多共同点和差异在程序的表面形式上表现得并不明显。有些程序机制的引入将引起语言实现模型的根本性变化,例如支持递归,支持数组的越界检查,支持动态的类型检查,支持各种面向对象的概念等等。这些都会对我们写程序的方式,写出的程序的效率和灵活性产生重要影响。为什么会出现这种情况?其根源就在于程序语言与常规计算机的深层关系,在于将这些语言特征映射到常规计算机的方式和技术。理解了这些问题,不但能够帮助我们做出更合理的语言选择,也使我们能更有把握地选择所使用的程序机制与结构,不管在那种具体语言里写程序,这些选择也是极端重要的。对于本书有关知识的学习将能在这个方面给我们以帮助。

在实际中,新的语言层出不穷,学习新语言会成为许多计算机工作者毕生都要做的事情。由于新的应用问题(太多了,数不胜数),新的程序运行环境(例如网络环境,并行环境等),对于程序设计实践的新认识(例如,面向对象),理论研究的新成果,甚至是为了个别公司自身的商业利益,如此等等,这些都可能导致新语言的出现。学习程序设计语言课程或相关书籍有一个重要作用,那就是能使人更容易看清自己正在学习的语言的关键性特征,也更容易看清楚语言中的陷阱(没有语言能完全避免这些东西),使语言学习更有成效,也使人能将新学习的语言更快更好地应用于实际。

换一个角度,从更不功利的观点出发去看问题。程序设计语言是计算机科学技术领域中的一个重要分支,在过去的50年里,人们在这个领域中的研究和开发取得了极其丰硕的成果,这些成果,作为计算机科学技术研究的智力产出,也是非常值得了解和学习的。即使作为一种欣赏,观看、领略那些从事程序设计语言研究和实践的先行者的各种智力的和技术的杰作,也是非常令人愉快的事情,且不说这些思想和技术还可能作为我们工作中的借鉴。

我们非常高兴地看到,本书的出版将为图书市场上数量极少的类似书籍增添新的一员,也使关心这一领域的读者,准备和正在开设这方面课程的教师,学习这方面课程的学生增加一种新的选择。本书的翻译工作由我负责组织,我的一些学生参予。前言和第12891011章由我翻译,第34章由蒲戈光翻译,第5章由魏晋伟翻译,第67章由林宗芳翻译,第12131415章由秦胜潮翻译,最后由我统一修改定稿,秦胜潮也参予了一些修订。蒲戈光还为这个工作实现了一个术语对照查询的帮助系统。本书译稿的每章都经过至少两个人多遍阅读和修订。我们希望这个工作的结果能够使读者满意。

裘宗燕 20017月于北京大学