程序设计语言--实践之路(第二版)
基本信息
- 作者: (美)Michael L.Scott [作译者介绍]
- 译者: 裘宗燕
- 出版社:电子工业出版社
- ISBN:9787121042980
- 上架时间:2007-7-19
- 出版日期:2007 年6月
- 开本:16开
- 页码:899
- 版次:2-1
- 所属分类:
计算机 > 软件与程序设计 > 综合 > 程序(设计)理论
计算机 > 软件工程及软件方法学 > 综合
编辑推荐
裘宗燕老师最新译作!
创造性地将程序设计语言与编译器设计有机结合!
修炼扎实的基本功 做注重实效的程序员!
与《编程卓越之道 第二卷:运用底层语言思想编写高级语言代码》搭配,彻底修炼程序员基本功!
全球上百所大学列为标准教材和首席参考书!图书馆必备典藏,程序员修炼之道!
推荐阅读
内容简介回到顶部↑
这是一本很有特色的教材,其核心是讨论程序设计语言的工作原理和技术。本书融合了传统的程序设计语言教科书和编译教科书的有关知识,并增加了一些有关汇编层体系结构的材料,以满足没学过计算机组织的学生们的需要。书中通过各种语言的例子,阐释了程序设计语言的重要基础概念,讨论了各种概念之间的关系,解释了语言中许多结构的形成和发展过程,以及它们演化为今天这种形式的根源。书中还详细讨论了编译器的工作方式和工作过程,说明它们对源程序做了什么,以及为什么要那样做。书的每章最后附有复习题和一些更具挑战性的练习。这些练习的特别价值在于引导学生进一步深入理解各种语言和技术。本书第2版新增了脚本语言问题的讨论,涵盖perl、python、ruby、tcl、php、javascript、xslt等和其他语言。
本书在美国大学已使用了十余年,目前被欧美许多重要大学用于“程序设计语言”或者“软件系统”课程。本书适合高年级本科生或者一年级研究生使用,许多内容对专业程序员也很有价值。本书作者michael l.scott 是计算机领域的著名学者,译者是北京大学的裘宗燕教授,他熟悉专业,译笔流畅,因此,这是一本难得的著、译双馨的佳作。
本书在美国大学已使用了十余年,目前被欧美许多重要大学用于“程序设计语言”或者“软件系统”课程。本书适合高年级本科生或者一年级研究生使用,许多内容对专业程序员也很有价值。本书作者michael l.scott 是计算机领域的著名学者,译者是北京大学的裘宗燕教授,他熟悉专业,译笔流畅,因此,这是一本难得的著、译双馨的佳作。
作译者回到顶部↑
本书提供作译者介绍
Michael L.Scott 是罗切斯特大学计算机科学系的教授,前任系主任。他于1985年获得麦迪逊的威斯康星大学博士学位。他是Lynx分布式程序设计语言、Charlocle和Psyche并行操作系统、Bridge并行文件系统、Casllmere和InterWeave分布式共享存储系统和许多广泛使用的同步算法和并发数据结构的设计者或共同设计者。2001年获得该大学的“Robetl和Pamela Goergen本科生教学突出贡献奖”。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
第1部分 基础
第1章 引言
1.1 语言设计的艺术
1.2 程序设计语言的谱系
1.3 为什么研究程序设计语言
1.4 编译和解释
1.5 程序设计环境
1.6 编译概览
1.7 总结和注记
1.8 练习
1.9 探索
1.10 有关参考文献
第2章 程序设计语言的语法
2.1 描述语法:正则表达式和上下文无关文法
2.2 扫描
2.3 语法分析
2.4 理论基础
2.5 总结和注记
2.6 练习
2.7 探索
第1章 引言
1.1 语言设计的艺术
1.2 程序设计语言的谱系
1.3 为什么研究程序设计语言
1.4 编译和解释
1.5 程序设计环境
1.6 编译概览
1.7 总结和注记
1.8 练习
1.9 探索
1.10 有关参考文献
第2章 程序设计语言的语法
2.1 描述语法:正则表达式和上下文无关文法
2.2 扫描
2.3 语法分析
2.4 理论基础
2.5 总结和注记
2.6 练习
2.7 探索
译者序回到顶部↑
Michael Scott的Programming Language Pragmatics是一本很有价值的教科书,其内容涵盖程序设计语言、编译技术、软件系统的许多方面,甚至延伸到硬件体系结构等许多领域。出现这一情况的根源很明显:程序语言在计算机科学技术领域居于一种中心地位。程序是计算机科学技术里最核心的概念,而作为描述程序的语言,集中体现了程序设计和软件开发实践中形成的最有价值、最具普遍性的认识和技术。程序语言下接硬件体系结构,上承丰富多彩的计算机应用需求,既反映了开发者的专业发展和局限性,又受到实现的制约。这样,程序语言里很自然地浓缩了相关领域的大量知识和技术精华,要理解语言发展和演化的现状和趋势,也必然涉及与之相关的众多领域。本书作者熟悉这些相关领域,因此能在其中纵横驰骋,为我们展现了一幅有关程序语言的生动、全面,而又非常深刻的画卷。.
本书系统地介绍了程序语言领域的各种基本概念,介绍了语言处理方面的许多知识,不同的语言范型以及相关的理论和实践。在讨论各种语言特征时,特别仔细地考察了人们的评价和反思,阐释了各种特征的设计变化,以及理论和技术发展对语言形态和细节的影响。与此同时,本书还深入介绍了本领域的许多新发展、新问题和新技术。例如,作者用一章的篇幅深入探讨了面向对象语言的问题,不仅介绍了这类语言的外在形式特征及其价值,还特别仔细地讨论了这类语言中各种新的重要机制的实现技术,如动态方法约束、多重继承等等。用很长的一章深入讨论了并行性的历史和发展,以及与并行性有关的各种重要问题。第2版新增了有关脚本语言的一章,其中讨论了脚本语言的特点、应用和许多深入问题。书中还详细讨论了高级语言的加工过程,程序的静态连接和动态连接,以帮助读者理解这方面的情况。作者在书中既强调了重要的概念和理论,也特别重视各种特征的实现技术,并深入探讨了实现技术及其发展进步对程序语言设计的影响。应该看到,语言实现方面的许多技术都是最重要的程序技术,作者的这些想法也使本书成为一部很有价值的软件技术书籍。..
本书新的第2版增加了许多内容,特别反映了程序设计语言领域最近几年的新发展。例如书中特别讨论了C99的许多新特征,讨论了Java和C# 的泛型机制,Java等语言最新的并行库的重要特征,Python和Ruby语言的面向对象模型和高级结构。本书的内容也大大增加了,配套光盘里包含一些问题的深入讨论,还有许多很有价值的参考材料。
总而言之,本书在许多方面有鲜明特色,是程序设计语言领域教科书的最新代表。本书出版之后受到人们的广泛关注,很快被世界各国的许多重要大学选为“程序设计语言”或相关课程的教科书或重要参考书。我认为,这本书不仅值得计算机专业的本科生或研究生学习,也值得计算机领域的实践工作者们阅读。对本书的学习能帮助我们理解现有的各种程序设计语言,提高学习和掌握新语言的能力,还能帮助我们看清隐藏在高级语言的各种机制背后的许多深入的东西,理解各种重要语言特征的价值、缺陷和使用它们的代价。对程序设计语言的深入理解,对于计算机专业工作者深刻理解相关的理论和实践,灵活高效地运用程序语言和相关工具,都可能起到非常重要的作用。
我非常赞赏电子工业出版社引进这本很有价值的著作,也很高兴能在把本书介绍给国内读者方面做些工作。我感谢周筠女士的远见卓识和陈元玉编辑的辛勤工作,还要感谢夏萍和丛欣对我的一贯支持和帮助。本书涉及领域广泛,其中许多是我不熟悉的。虽然我已尽可能查阅了一些材料,但书中难免还会留下许多缺陷,希望得到同行和读者的指教。...
裘宗燕
2007年5月,于北京大学
本书系统地介绍了程序语言领域的各种基本概念,介绍了语言处理方面的许多知识,不同的语言范型以及相关的理论和实践。在讨论各种语言特征时,特别仔细地考察了人们的评价和反思,阐释了各种特征的设计变化,以及理论和技术发展对语言形态和细节的影响。与此同时,本书还深入介绍了本领域的许多新发展、新问题和新技术。例如,作者用一章的篇幅深入探讨了面向对象语言的问题,不仅介绍了这类语言的外在形式特征及其价值,还特别仔细地讨论了这类语言中各种新的重要机制的实现技术,如动态方法约束、多重继承等等。用很长的一章深入讨论了并行性的历史和发展,以及与并行性有关的各种重要问题。第2版新增了有关脚本语言的一章,其中讨论了脚本语言的特点、应用和许多深入问题。书中还详细讨论了高级语言的加工过程,程序的静态连接和动态连接,以帮助读者理解这方面的情况。作者在书中既强调了重要的概念和理论,也特别重视各种特征的实现技术,并深入探讨了实现技术及其发展进步对程序语言设计的影响。应该看到,语言实现方面的许多技术都是最重要的程序技术,作者的这些想法也使本书成为一部很有价值的软件技术书籍。..
本书新的第2版增加了许多内容,特别反映了程序设计语言领域最近几年的新发展。例如书中特别讨论了C99的许多新特征,讨论了Java和C# 的泛型机制,Java等语言最新的并行库的重要特征,Python和Ruby语言的面向对象模型和高级结构。本书的内容也大大增加了,配套光盘里包含一些问题的深入讨论,还有许多很有价值的参考材料。
总而言之,本书在许多方面有鲜明特色,是程序设计语言领域教科书的最新代表。本书出版之后受到人们的广泛关注,很快被世界各国的许多重要大学选为“程序设计语言”或相关课程的教科书或重要参考书。我认为,这本书不仅值得计算机专业的本科生或研究生学习,也值得计算机领域的实践工作者们阅读。对本书的学习能帮助我们理解现有的各种程序设计语言,提高学习和掌握新语言的能力,还能帮助我们看清隐藏在高级语言的各种机制背后的许多深入的东西,理解各种重要语言特征的价值、缺陷和使用它们的代价。对程序设计语言的深入理解,对于计算机专业工作者深刻理解相关的理论和实践,灵活高效地运用程序语言和相关工具,都可能起到非常重要的作用。
我非常赞赏电子工业出版社引进这本很有价值的著作,也很高兴能在把本书介绍给国内读者方面做些工作。我感谢周筠女士的远见卓识和陈元玉编辑的辛勤工作,还要感谢夏萍和丛欣对我的一贯支持和帮助。本书涉及领域广泛,其中许多是我不熟悉的。虽然我已尽可能查阅了一些材料,但书中难免还会留下许多缺陷,希望得到同行和读者的指教。...
裘宗燕
2007年5月,于北京大学
前言回到顶部↑
计算机程序设计的课程给了普通学生有关计算机领域的第一个印象。在上这种课程之前,大多数学生已经在自己的生活中使用着计算机,用于诸如电子邮件、计算机游戏、浏览网页、做文字处理、即时消息(聊天),以及大量其他事项,而且在他们还没有写出自己的程序之前,就已经开始关注这些应用系统的工作方式了。在获得了作为程序员的一定能力之后(假定已经学过很好的有关数据结构和算法的课程),很自然地,下一步就是想知道程序设计语言是如何工作的。本书就是对此提供一个解释。本书的目标很简单,就是采用尽可能容易理解和最精确的语言,采用普通本科生愿意阅读并易于接受的风格。这一目标反应了我的一种信念:如果我们真能很好地解释一件事情究竟是怎样的,学生总是希望想理解更多东西,并乐于去接触更多的材料。.
在常规的有关“系统”的教学计划里,数据结构(或者再加上计算机组织)之后的内容被分门别类归入属于一些子领域的一批课程,如程序设计语言、编译构造、计算机体系结构、操作系统、并行和分布式计算、数据库管理系统,可能还有软件工程、面向对象的设计、图形学,或者用户界面系统。这种安排方式存在一个缺点:这一科目列表在不断地增长,而学士课程教学计划中的学期数却保持不变。或许更重要的是,有关计算机科学最有趣的许多东西都处在这些科目之间的边界上。例如,RISC革命造成计算机体系结构和编译器构造之间持续20年的联盟。最近几年,重新热起来的对虚拟机的兴趣使操作系统内核与语言的运行时系统之间的分界线变得很模糊了。Java和 .NET也以类似的形式模糊了编译器和运行库之间的分野。今天许多程序被常规地嵌在万维网页、电子报表和用户界面里。
与此同时,教育工作者和研究者也越来越认识到必须关注这些相互关系。特别是在高等教育的核心教学计划中出现一种集成的趋势。许多学校不是给普通学生有关两三个狭窄科目的深入探讨,同时又在其他方面留下很大的空缺,而是重整了有关程序设计语言和操作系统的课程,使之涵盖范围更广泛的科目,再提供一些更专门的后续课程。这一趋势在很大程度上是ACM/IEEE计算教程2001所提出的认识的发展。在这一教程中强调了本领域的成长,对于广度日益增长的需要,教学计划设计灵活性的重要意义,以及对于毕业生的总体目标:“必须有一种系统层面的认识,该认识应适于帮助理解理论和实践之间的相互作用,熟悉常见的研究课题,并能随着本领域的发展而更新”[CR01,11.1节,有修改]。
《程序设计语言——实践之路》的第1版很幸运地跟上了这种趋势。第2版继续并加强了对集成学习的重视程度,并继续以关于程序设计语言设计的讨论为中心。
本书的核心就是讨论程序设计语言是如何工作的问题。其中并没有去列举许多不同语言的细节,而是集中关注学生们可能遇到的有关所有语言之基础的一批概念,通过各种各样的实际例子阐释这些概念,并努力探索解释为什么不同语言的设计采纳了不同方式背后的那些利弊权衡。同样,本书也不去讨论如何构造一个编译器或者解释器(那只是极少数的程序员最终需要整个地参与的一种工作),它将集中关注编译器对输入的源程序做了些什么事情,以及为什么要那样做。语言的设计和实现在这里被放在一起考察,其中特别强调它们之间相互作用的各种方式。
第2版的变化
Changes in the Second Edition
第2版有4个目标:
1. 引进一些新材料,最主要的是有关脚本语言的材料。
2. 更新内容,使之反映过去六年中发生的各方面情况。
3. 减少提高书价格的压力。
4. 从教育学的观点加强这本书,使之更容易使用,更容易理解。
项(1)是内容上最重要的变动。由于万维网的迅猛扩张,我们可以看到如Perl、PHP、Tcl/Tk、Python、Ruby、JavaScript和XSLT等语言的巨大发展,不仅在其商业重要性方面,也在其设计创新方面。今天的许多毕业生将把他们更多的时间花到脚本语言的工作上,可能比C++、Java和C# 更多。有关脚本语言的一个新章(第13章)首先是按应用领域组织的(外壳语言,文字处理和报表生成,数学和统计,“粘接”语言和通用脚本语言,扩充语言,以及万维网脚本),而后再按新特征组织的(名字和作用域,字符串和模式匹配,高级数据结构,面向对象)。对于脚本语言的讨论也被加入正文中其他所有合适的地方。
项(2)反映了一些关键性的发展,如C99标准的最终完成,Java 5和C#(版本2.0)的出现。第6章(控制流)现在包括了装盒和开盒,以及最新的迭代器结构。第8章(子程序)讨论了Java和C# 的泛型。第12章(并发性)涵盖了Java 5的并行库(JSR 166)。对C# 的讨论也加入了通篇中各个合适的地方。为了反映微处理器市场的变化,在第5章(体系结构)和第8章(子程序)的实例研究中,无处不在的Intel/AMD x86取代了Motorola 68000。第8章里有关MIPS的实例研究也提升到64位模式。有关技术指标和趋势的讨论也都做了更新。在一些地方,我重写了使用语言的例子,采用了一些学生可能更熟悉的实例。这一过程无疑还将在今后的版本中继续进行。
第2版里许多章节做了大量修改,以使之更清晰并更准确。有关章节包括有穷自动机的创建(2.2.1节),声明顺序(3.3.3节),模块(3.3.4节),别名和重载(3.6.1节和3.6.2节),多态性和泛型(3.6.3节、7.1.2节、8.4节和9.4.4节),分别编译(3.7节),延续、异常和多层返回(6.2.1节、6.2.2节和8.5节),调用序列(8.2节)以及第5章的几乎全部内容。
项(3)反映了Morgan Kaufmann关于使教科书具有学生容易接受的价格的承诺。第1版比与之可比的教科书更大而且内容更全面,但售价却更低。第2版用高质量的平装形式保持了可接受的价格(同时减小了体积)。..
最后是项(4),体现在大量表现方式的改变上。其中一些改变很细微,例如给出了更多的小节标题,以及更多历史事实。更重要的是将本书组织为四个主要部分:
第1部分 包含最基础的材料:(1)有关语言设计和实现的简介;(2)程序设计语言的语法;(3)名字、作用域和约束;(4)语义分析;(5)目标机体系结构。这里的(2)和 (5)以合理的方式集中关注实现方面的问题,(1)和(4)涉及面较广,(3)介绍了语言设计中的一些核心问题。
第2部分 继续涵盖其他的核心问题:(6)控制流;(7)数据类型;(8)子程序和控制抽象;(9)数据抽象和面向对象。最后一章从其在第1版里的位置前移了,反映了面向对象程序设计在现代计算中的中心地位。
第3部分 转向其他程序设计模型:(10)函数式语言;(11)逻辑式语言;(12)并发;(13)脚本语言。在第1版里函数式和逻辑式语言共处一章。
在常规的有关“系统”的教学计划里,数据结构(或者再加上计算机组织)之后的内容被分门别类归入属于一些子领域的一批课程,如程序设计语言、编译构造、计算机体系结构、操作系统、并行和分布式计算、数据库管理系统,可能还有软件工程、面向对象的设计、图形学,或者用户界面系统。这种安排方式存在一个缺点:这一科目列表在不断地增长,而学士课程教学计划中的学期数却保持不变。或许更重要的是,有关计算机科学最有趣的许多东西都处在这些科目之间的边界上。例如,RISC革命造成计算机体系结构和编译器构造之间持续20年的联盟。最近几年,重新热起来的对虚拟机的兴趣使操作系统内核与语言的运行时系统之间的分界线变得很模糊了。Java和 .NET也以类似的形式模糊了编译器和运行库之间的分野。今天许多程序被常规地嵌在万维网页、电子报表和用户界面里。
与此同时,教育工作者和研究者也越来越认识到必须关注这些相互关系。特别是在高等教育的核心教学计划中出现一种集成的趋势。许多学校不是给普通学生有关两三个狭窄科目的深入探讨,同时又在其他方面留下很大的空缺,而是重整了有关程序设计语言和操作系统的课程,使之涵盖范围更广泛的科目,再提供一些更专门的后续课程。这一趋势在很大程度上是ACM/IEEE计算教程2001所提出的认识的发展。在这一教程中强调了本领域的成长,对于广度日益增长的需要,教学计划设计灵活性的重要意义,以及对于毕业生的总体目标:“必须有一种系统层面的认识,该认识应适于帮助理解理论和实践之间的相互作用,熟悉常见的研究课题,并能随着本领域的发展而更新”[CR01,11.1节,有修改]。
《程序设计语言——实践之路》的第1版很幸运地跟上了这种趋势。第2版继续并加强了对集成学习的重视程度,并继续以关于程序设计语言设计的讨论为中心。
本书的核心就是讨论程序设计语言是如何工作的问题。其中并没有去列举许多不同语言的细节,而是集中关注学生们可能遇到的有关所有语言之基础的一批概念,通过各种各样的实际例子阐释这些概念,并努力探索解释为什么不同语言的设计采纳了不同方式背后的那些利弊权衡。同样,本书也不去讨论如何构造一个编译器或者解释器(那只是极少数的程序员最终需要整个地参与的一种工作),它将集中关注编译器对输入的源程序做了些什么事情,以及为什么要那样做。语言的设计和实现在这里被放在一起考察,其中特别强调它们之间相互作用的各种方式。
第2版的变化
Changes in the Second Edition
第2版有4个目标:
1. 引进一些新材料,最主要的是有关脚本语言的材料。
2. 更新内容,使之反映过去六年中发生的各方面情况。
3. 减少提高书价格的压力。
4. 从教育学的观点加强这本书,使之更容易使用,更容易理解。
项(1)是内容上最重要的变动。由于万维网的迅猛扩张,我们可以看到如Perl、PHP、Tcl/Tk、Python、Ruby、JavaScript和XSLT等语言的巨大发展,不仅在其商业重要性方面,也在其设计创新方面。今天的许多毕业生将把他们更多的时间花到脚本语言的工作上,可能比C++、Java和C# 更多。有关脚本语言的一个新章(第13章)首先是按应用领域组织的(外壳语言,文字处理和报表生成,数学和统计,“粘接”语言和通用脚本语言,扩充语言,以及万维网脚本),而后再按新特征组织的(名字和作用域,字符串和模式匹配,高级数据结构,面向对象)。对于脚本语言的讨论也被加入正文中其他所有合适的地方。
项(2)反映了一些关键性的发展,如C99标准的最终完成,Java 5和C#(版本2.0)的出现。第6章(控制流)现在包括了装盒和开盒,以及最新的迭代器结构。第8章(子程序)讨论了Java和C# 的泛型。第12章(并发性)涵盖了Java 5的并行库(JSR 166)。对C# 的讨论也加入了通篇中各个合适的地方。为了反映微处理器市场的变化,在第5章(体系结构)和第8章(子程序)的实例研究中,无处不在的Intel/AMD x86取代了Motorola 68000。第8章里有关MIPS的实例研究也提升到64位模式。有关技术指标和趋势的讨论也都做了更新。在一些地方,我重写了使用语言的例子,采用了一些学生可能更熟悉的实例。这一过程无疑还将在今后的版本中继续进行。
第2版里许多章节做了大量修改,以使之更清晰并更准确。有关章节包括有穷自动机的创建(2.2.1节),声明顺序(3.3.3节),模块(3.3.4节),别名和重载(3.6.1节和3.6.2节),多态性和泛型(3.6.3节、7.1.2节、8.4节和9.4.4节),分别编译(3.7节),延续、异常和多层返回(6.2.1节、6.2.2节和8.5节),调用序列(8.2节)以及第5章的几乎全部内容。
项(3)反映了Morgan Kaufmann关于使教科书具有学生容易接受的价格的承诺。第1版比与之可比的教科书更大而且内容更全面,但售价却更低。第2版用高质量的平装形式保持了可接受的价格(同时减小了体积)。..
最后是项(4),体现在大量表现方式的改变上。其中一些改变很细微,例如给出了更多的小节标题,以及更多历史事实。更重要的是将本书组织为四个主要部分:
第1部分 包含最基础的材料:(1)有关语言设计和实现的简介;(2)程序设计语言的语法;(3)名字、作用域和约束;(4)语义分析;(5)目标机体系结构。这里的(2)和 (5)以合理的方式集中关注实现方面的问题,(1)和(4)涉及面较广,(3)介绍了语言设计中的一些核心问题。
第2部分 继续涵盖其他的核心问题:(6)控制流;(7)数据类型;(8)子程序和控制抽象;(9)数据抽象和面向对象。最后一章从其在第1版里的位置前移了,反映了面向对象程序设计在现代计算中的中心地位。
第3部分 转向其他程序设计模型:(10)函数式语言;(11)逻辑式语言;(12)并发;(13)脚本语言。在第1版里函数式和逻辑式语言共处一章。
序言回到顶部↑
计算机科学惯于在抽象之上建立抽象。在我们的领域里,把细节隐藏到简化界面之下的功能既是一种利器,也是不得已而为之。操作系统、数据库和编译器都是非常复杂的程序,历经40年理论和开发的磨砺。在绝大多数情况下,为使用一个软件提供的功能,程序员很少或根本不必理解其内部逻辑或结构。在大部分情况下,不知这是祸是福。.
然而,模糊的抽象也可能变成阻碍发展和进步的壁垒,而不是新生事物的可靠基础。请看一看本书考察的主题:程序和程序设计语言。为什么一个程序运行得慢如蜗牛,而从执行剖析却看不出其中有任何明显的瓶颈,或者无法给其瓶颈找到一种算法解释?有些潜在问题根源于从语言结构到机器指令的翻译,或是所生成代码与处理器体系结构的交互作用。要解决这类问题,就需要理解连接不同抽象层次的桥梁。
抽象也同样出现在学习的道路上。简单的问题如:用英语的一个小小的呆板子集写出的程序如何控制只懂得二进制语言的机器?或者,虽然有种类和数目繁多的程序设计语言,但为什么它们看起来都相当类似?如果不潜入细节,不理解计算机、编译器和语言,这类问题也无法回答。
作为一个整体,计算机科学的教育确实能回答这些问题。大多数本科生教学计划都提供了关于诸如计算机体系结构、操作系统、程序设计语言设计和编译器的课程。所有这些美妙课程都很值得去学,但是却很难融入一个本科生的计算机科学教学计划里,因为它还要提供其他的丰富内容。进一步说,许多课程教授的都是一些独立的主题,却很少解释一个主题与其他主题之间的联系。..
本书采用另一种视角,超越了分隔上述种种论题的抽象,从而能很好地回答上面这类问题。Michael Scott是一位卓越的研究者,在语言实现、运行时系统和计算机体系结构方面都有杰出建树。他特别有资格描绘所有这些领域,提供有关现代程序设计语言的一种具有内在统一性的理解。本书不仅用极其清晰的笔调解释了语言的各种概念和实现细节,也阐释了计算机体系结构和编译器如何影响语言的设计和实现。进一步说,它清晰地展现了各种不同语言在实际中如何使用,用一些很实际的例子说明问题领域如何打磨着这些语言。
在阅读本书所感兴趣的问题的同时,我必须承认当第一次读这本书时,我也曾感到担忧。那时我担心Michael的方式会削弱教学计划中程序设计语言和编译器的地位,使学生对这一领域的理解表面化。但现在,通过重读这本书,我已经认识到事实恰恰与我的担心相反。通过把相关的论题放在合适的位置上展示,本书很好地说明了程序设计语言如何居于计算机科学真正的中心,成为跨越程序员和机器之间的深渊的桥梁。...
James Larus,Microsoft Research
然而,模糊的抽象也可能变成阻碍发展和进步的壁垒,而不是新生事物的可靠基础。请看一看本书考察的主题:程序和程序设计语言。为什么一个程序运行得慢如蜗牛,而从执行剖析却看不出其中有任何明显的瓶颈,或者无法给其瓶颈找到一种算法解释?有些潜在问题根源于从语言结构到机器指令的翻译,或是所生成代码与处理器体系结构的交互作用。要解决这类问题,就需要理解连接不同抽象层次的桥梁。
抽象也同样出现在学习的道路上。简单的问题如:用英语的一个小小的呆板子集写出的程序如何控制只懂得二进制语言的机器?或者,虽然有种类和数目繁多的程序设计语言,但为什么它们看起来都相当类似?如果不潜入细节,不理解计算机、编译器和语言,这类问题也无法回答。
作为一个整体,计算机科学的教育确实能回答这些问题。大多数本科生教学计划都提供了关于诸如计算机体系结构、操作系统、程序设计语言设计和编译器的课程。所有这些美妙课程都很值得去学,但是却很难融入一个本科生的计算机科学教学计划里,因为它还要提供其他的丰富内容。进一步说,许多课程教授的都是一些独立的主题,却很少解释一个主题与其他主题之间的联系。..
本书采用另一种视角,超越了分隔上述种种论题的抽象,从而能很好地回答上面这类问题。Michael Scott是一位卓越的研究者,在语言实现、运行时系统和计算机体系结构方面都有杰出建树。他特别有资格描绘所有这些领域,提供有关现代程序设计语言的一种具有内在统一性的理解。本书不仅用极其清晰的笔调解释了语言的各种概念和实现细节,也阐释了计算机体系结构和编译器如何影响语言的设计和实现。进一步说,它清晰地展现了各种不同语言在实际中如何使用,用一些很实际的例子说明问题领域如何打磨着这些语言。
在阅读本书所感兴趣的问题的同时,我必须承认当第一次读这本书时,我也曾感到担忧。那时我担心Michael的方式会削弱教学计划中程序设计语言和编译器的地位,使学生对这一领域的理解表面化。但现在,通过重读这本书,我已经认识到事实恰恰与我的担心相反。通过把相关的论题放在合适的位置上展示,本书很好地说明了程序设计语言如何居于计算机科学真正的中心,成为跨越程序员和机器之间的深渊的桥梁。...
James Larus,Microsoft Research


点击看大图






加载中...