`
chelsea
  • 浏览: 123749 次
  • 来自: ...
社区版块
存档分类
最新评论

Essential SICP Primer

    博客分类:
 
阅读更多

综述

本书以Lisp语言本身为例,完整而辨证的讲述了“计算机程序”的各种形而上形而下的问题:

  • 程序语言本身的要素(原语、组合手段、抽象手段)

  • 程序的计算模型(代换模型、环境模型,迭代、递归)

  • 程序的世界观(对象式、函数式)

  • 程序如何繁殖进化(元语言抽象)

  • 程序如何执行(编译、解释)

同时阐述了程序设计中常用的几大关键技术:

  • 寄存器与堆栈的使用(目前多数计算机的基本抽象)

  • 数据导向与通用型计算(涉及高阶过程,数据与过程的统一)

  • 并发程序设计(模型与时序的冲突)

  • 历史记忆法(即缓存)

  • 应用序与正则序,及背后的惰性求值/延时求值方法论

  • 迭代与尾递归的转换

后两种看似只是一种优化技术,实际上不止如此,它们牵扯到程序的合法性,运行结果的可预期性

还有几种特殊的程序设计技术:

  • 模拟时间分叉的非确定性计算

  • 模拟逻辑推理的逻辑程序设计

  • 模拟数学公式的约束系统设计

一、语言要素

每一种强有力的语言都提供了三种机制:

  • 基本表达形式,用于表示语言所关心的最简单的个体

  • 组合的方法,通过它们可以从较简单的东西出发构造出复合的元素

  • 抽象的方法,通过它们可以为复合对象命名,并将它们当作单元去操作

二、数据与过程的统一

第一级元素的特权:

  • 可以用变量命名

  • 可以提供给过程作为参数

  • 可以由过程作为结果返回

  • 可以包含在数据结构中

Lisp给了“过程”完全的第一级状态,而一般而言,我们可以将数据定义为:

  • 一组适当的构造函数(必选)和选择函数(必选)及改变函数(可选)

  • 为使这些函数成为一套合法表示,它们就必须满足的一组特定条件

这样,数据与过程在Lisp中就完全统一了

三、并发、时间与通信

并发的基本现象是共享状态在不同进程间的同步,或迫使进程间通信所产生的事件按照某种特定的顺序进行;从本质上看,在并发控制中,任何时间概念都必然与通信有内在的联系;有意思的是,时间与通信之间的这种联系也出现在相对论里,在那里的光速(可能用于同步事件的最快信号)是与时间和空间有关的基本常量;在处理时间和状态时,我们在计算模型领域所遭遇的复杂性,事实上可能就是物理世界中最基本的复杂性的一种反映

四、对象模型与函数式模型

从一个复杂过程中的一部分的观点出发,其它的部分看起来正在随时间变化,它们有着隐蔽的随时间变化的局部状态;如果我们希望去写程序,在计算机里用某种结构去模拟现实世界中的这类自然分解,那么就会做出一些不是函数式的对象--它们必须随着时间不断变化;我们用局部状态变量去模拟状态,用对这些变量的赋值模拟状态的变化;在这样做的时候,就是在用计算执行中的时间去模拟我们所在的世界里的时间,也就是把“对象”弄进了计算机

用对象来做模拟是威力强大的,也很直观,这一情况的主要根源,就在于它非常符合我们对自己身处其中并与之交流的世界的看法;然而,正如我们已经反复看到的这种模型也产生了对于事件的顺序的依赖,以及同步多个进程的棘手问题;避免这些问题的可能性推动着“函数式程序设计语言”的开发,这类语言里根本不提供赋值或者变动对象,在这样的语言里,所有过程实现的都是它们参数上的定义良好的数学函数,其行为不会变化;物理世界中也有这样的例子,当我们观察一个正在移动的粒子时,我们说该粒子的位置(状态)正在变化,然而,从粒子的世界线的观点看,这里根本就不涉及任何变化

然而,如果我们贴近观察,就会看到与时间有关的问题也潜入了函数式模型中,原因在于函数式模型与时间无关的特性是将提供时态、时序的责任推给用户方实现的,当用户方无法提供时态时,又要重新引入函数式风格致力消除的同一个问题

我们可以将这一世界模拟为一集相互分离的,受时间约束的,有局部状态的,相互交流的对象,或者也可以将世界看作一个大函数,是单一的,无时间的,无状态的统一体;对象模型对世界的近似在于将其分割为独立的片断,函数式模型则不是沿着对象间的边界去做模块化。当对象间不共享的状态远远大于它所共享的状态时,对象模型就特别好用。这种对象观点失效的一个地方是量子力学,在那里将物体看作独立的粒子就会导致悖论和混乱。将对象观点和函数观点统一起来可能与程序设计关系不大,而是与基本认识论有关。每种观点都有其强有力的优势,但就其自身而言,又没有一种方式能够完全令人满意,我们还在期待着一个大统一的出现

五、元语言抽象与通用机器

这里的深刻思想是,任一求值器都能模拟其它的求值器;这样,有关“原则上说什么可以计算”的概念(忽略掉所有有关时间和空间的实践性问题)就是与语言或计算机无关的了;它反映的是一个有关“可计算性”的基本概念;这一思想第一次是由图灵阐述的;图灵给出了一种简单的计算模型--现在被称为图灵机--并声称,任何“有效过程”都可以描述为这种机器的一个程序;图灵而后实现了一台通用机器,即一台图灵机,其行为就像是所有图灵机程序的求值器

六、编译与解释

编译可以大大提高程序执行的效率,解释则为程序开发和排除错误提供了一个更强大的环境,因为被执行的源代码在运行期间都是可用的,可用去检查和修改,此外,由于整个基本操作的库都在那里,我们可以在排除错误的过程中构造新程序,随时把它们加入系统中;

由于看到了编译和解释的互补优势,现代程序开发环境很推崇一种混合的策略,使得解释性程序和编译性程序可以互相调用;这就使程序员可以编译那些自己认为已经排除了错误的部分,从而取得编译方式的效率优势,而让那些正在进行交互式开发和排错的,还在不断变化的程序部分的执行仍然维持在解释模式中;还可以使程序员根据实际问题选择最合适的语言

分享到:
评论

相关推荐

    SICP中文第二版

    SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版

    sicp in python 中文 sicp 中文

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh

    sicp 2.2.4节图形语言

    《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...

    SICP(python中文带书签)

    《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称SICP)是一本备受推崇的经典计算机科学教材,由Harold Abelson和Gerald Jay Sussman撰写,并由MIT出版社出版。这本书以其深入...

    SICP-Python版本

    SICP-Python版本

    SICP 解题集

    《SICP解题集》是一份专注于探讨和解答《结构与解释程序》(Structure and Interpretation of Computer Programs,简称SICP)一书中习题的资源。SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay ...

    SICP 使用的scheme解释器

    SICP 使用的scheme解释器 以前叫DrScheme

    SICP 习题答案

    《计算机程序的构造和解释》(SICP)是一本极具影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,MIT出版社出版。这本书以其深入探讨编程概念、程序设计方法以及计算机系统的工作原理而闻名。1-3...

    SICP习题解答,主要第一章的内容习题答案

    《SICP习题解答,主要第一章的内容习题答案》 SICP,全称《Structure and Interpretation of Computer Programs》(计算机程序的构造和解释),是计算机科学领域的一本经典教材,由MIT(麻省理工学院)的 Harold ...

    Python SICP epub版本

    Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用

    SICP LISP AI

    《SICP》全称是《Structure and Interpretation of Computer Programs》,中文译为《计算机程序的构造和解释》。这是一本经典的计算机科学教材,由Harvard大学的 Harold Abelson 和 Gerald Jay Sussman 教授撰写,...

    北京大学,计算机程序构造和解释(SICP)课件,裘宗燕老师主讲

    《计算机程序构造和解释》(SICP,Structure and Interpretation of Computer Programs)是一本具有深远影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman编写,MIT Press出版。这门课程由北京大学数学...

    a_book_sicp_py

    本书名为《a_book_sicp_py》,是一本以Python语言为基础介绍设计模式和计算机科学基础的书籍。根据描述和部分内容,可以提炼出以下知识点: 1. 编程语言的重要性:在计算机科学的宽泛领域中,编程语言扮演着至关...

    PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz

    标题中的"PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz"指的是从Python的官方包索引(Python Package Index,简称PyPI)上下载的一个名为"sicp"的软件包的版本号为0.0.1b102.dev4的压缩文件,其格式是tar.gz。...

    sicp in python 中文版 sicp

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh

    sicp 2016 from

    ### 结构与解释计算机程序 (SICP) #### 标题和描述中的核心知识点解析 **《结构与解释计算机程序》(Structure and Interpretation of Computer Programs, SICP)** 是由哈佛大学的 Harold Abelson 和麻省理工学院...

    sicp 2nd 英文chm

    《Structure and Interpretation of Computer Programs》(简称SICP)是计算机科学领域的一部经典教材,由Harold Abelson和Gerald Jay Sussman撰写,第二版(2nd Edition)通常被称为SICP 2nd。这本书是麻省理工学院...

    sicp第二章练习题的解答

    《SICP(Structure and Interpretation of Computer Programs)》是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,它强调了程序设计的基础和原理,特别是函数式编程思想。第二章主要探讨了...

    SICP:SICP解决方案

    《SICP:SICP解决方案》是针对结构与解释程序设计(Structure and Interpretation of Computer Programs,简称SICP)这本书的详细解答和实践指南。SICP是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay ...

Global site tag (gtag.js) - Google Analytics