计算机程序的构造和解释(原书第2版)

[美] Harold Abelson

出版时间

2004-01-31

ISBN

9787111135104

评分

★★★★★

标签

0

书籍介绍

《计算机程序的构造和解释》成型于美国麻省理工学院(MIT)多年使用的一本教材,1984年出版,1996年修订为第二版。在过去的二十多年里,该书对于计算机科学的教育计划产生了深刻的影响。

在第二版中,大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器。作者根据其后十余年的教学实践,还对其他许多细节做了相应的修改。

AI导读
核心看点
  • MIT经典教材,深入讲解程序构造与解释原理
  • 以Scheme语言为载体,阐述抽象与模块化思想
  • 涵盖从过程抽象到编译器设计的完整计算模型
适合谁读
  • 希望深入理解计算机科学本质的开发者
  • 对函数式编程及语言设计感兴趣的读者
  • 具备一定基础,愿挑战思维深度的程序员
读前提醒
  • 阅读过程极具挑战,需做好长期啃读准备
  • 务必动手完成习题,否则难以真正掌握精髓
  • 可结合Python版教材辅助理解核心概念
读者共识
  • 被誉为计算机科学的圣经,提升编程境界
  • 阅读体验痛苦但收获巨大,重塑思维方式
  • 不仅是技术书,更蕴含深刻的哲学与美学

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "将数值作为"简单数据"看待实际上完全是作为一种虚张声势.事实上,对于数值的处理是任何程序设计语言里最错综复杂而且也最迷惑人的事项之一.其中涉及的典型问题包括: 某些计算机系统区分了整数(例如2)和实数(例如2.71).那么实数2.00和整数2不同吗?用于整数的算术运算是否与用于实数的运算相同呢?用6除以2的结果是3还是3.0?我们可以表示的最大的数是多少?最多能表示的精度包含了多少个十进制位?整数的表示范围与实数一样吗?......"
  • "虽然代换模型看起来似乎非常简单,但令人吃惊的是,给出代换过程的严格数学定义却异常复杂.问题在于,用作过程中形式参数的名字,可能会与该过程可能应用的那些表达式中的(同样)名字相互混淆.在逻辑和程序设计的语义学文献里,关于代换的充满错误的定义有一个很长的历史."
  • "说明性描述和行动性描述有着内在的联系,就像数学和计算机科学有内在的联系一样.举个例子,说一个程序产生的结果"正确",就是给出了一个有关该程序性质的说明性语句.存在着大量的研究工作,其目标就是创建起一些技术,设法证明一个程序是正确的.在这一领域中有许多技术性困难,究其根源,都出自需要在行动性语句(程序是有它们构造起来的)和说明性语句(它们可以用于推导出某些结果)之间转来转去"
  • "术语"闭包"来自于抽象代数,在抽象代数里,一集元素称为在某个运算(操作)之下封闭,如果将该运算作用于这一集合的元素,产生出的仍然是该集合里的元素.然而lisp社团(很不幸)还用术语"闭包"描述另一个与此毫不相干的概念.闭包也是一种为带有自由变量的过程而用的实现技术.本书没有采用闭包这一术语的第二种意义."
  • "...开发出一种有用的,具有一般意义的框架,以描述不同类型的对象之间的关系(这在哲学中称为"本体论").看来是一件极其困难的工作.在10年前存在的混乱和今天存在的混乱之间的主要差异在于,今天已经有了一批各式各样的并不合适的本体理论,它们已经被嵌入到数量过多而又先天不足的各种程序设计语言里.举例来说,面向对象语言的大部分复杂性---以及当前各种面向对象语言之间细微的而且使人迷惑的差异的核心,就是对类型之间通用型操作的处理....事实上,我们的猜想是,如果没有知识表示和自动推理工作的帮助,这些问题是无法仅仅通过计算机语言设计的方式合理处理的."
  • "在处理变动数据对象的共享问题时,最微妙的地方正好就反应了3.1.3节里提出的有关"同一"和"变化"的基本问题.我们在那里说过,如果希望这个语言里容许做修改,那么每个复合对象就必须有一个"标识",这应该是某种不同于构造起它的那些片段的东西.在lisp里,我们所认为的"同一"也就是检查课题之间的eq?,采用指针相等表示.这是因为在大部分lisp实现里,一个指针本质就是一个存储地址,在这里"解决"对象标识的方式,是假设数据对象"本身"也是一些信息,存储在计算机中某一些特定的存储位置,对于简单的lisp程序而言,这也就足够了.但是这并不是解决计算模型中"同一"问题的一般性方法."
  • "物理中也类似,当我们观察一个正在移动的粒子时,我们说该粒子的位置(状态)正在变化,然而,从粒子的世界线的观点看,这里根本就不涉及任何变化"
  • "对象模型对世界的近似在于将其分割为独立的片段,函数式模型则不是沿着对象的边界去做模块化。当“对象”之间不共享的状态远远大于它们所共享的状态时,对象模型就特别好用。这种对象观点失效的一个地方就是量子力学,在那里,将物体看做独立粒子就会导致悖论和混乱。将对象观点和函数式观点合并可能与程序设计的关系不大,而是与基本认识论有关的论题。"
作者简介
Harold Abelson是MIT1992年度MacVicar Faculty Fellow。Gerald Jay Sussman是Matsushita电子工程教授。他们都在MIT电子工程和计算机科学系工作,都得到过最重要的计算机科学教育奖:Abelson得到了IEEE计算机学会的Booth奖,Sussman得到了ACM的Karlstrom奖。Julie Sussman是作家和编辑,同时使用自然语言和计算机语言写作。
目录
出版者的话
专家指导委员会
第2版前言
第1版前言

显示全部
用户评论
做了前三章习题。递归用得更加顺手了。编程的气宗之书。
一本书里塞这么多内容!
那么让我们用咒语来操纵这些神灵
终于结束了,12年8月收的书,历时3年半。 现在开始动手做一个解释器。
读了前三章,并没有做习题。重点不在函数式编程,而是如书名在程序的构造和解释。函数式编程的优点被现在其他语言吸收的差不多了。话说这本书能看出国内外教育的差距。
原来是想当工作业余学习资料看的,结果发现太专业了,看得有点头晕
拜托……读起来不愉快是翻译的过于拗口好伐。😮‍💨
前三章:让我们学习一些 Scheme 基本概念; 第四章:让我们用 Scheme 实现一个 Scheme 解释器; 第五章前三节:让我们用 Scheme 实现一个 register-machine; 第五章第四节:让我们用 Scheme 实现一个在用 Scheme 实现的 register-machine 上的 Scheme 解释器; 第五章第五节:让我们用 Scheme 实现一个在用 Scheme 实现的 register-machine 上的 Scheme 解释器的 Scheme 编译器。 元他妈给元开门,元到家了属于是。
第一章讲的是数据结构,很多知识点原理相似,至于抽象性,不如去看数学
这本书内容非常丰富,但是大部分内容都是先从其它书里面看懂了原理 才回到这里搞明白的 从内容上看5星评分是肯定的,解释器,虚拟机都是非常好的内容啊
下载
收藏