EoPL3笔记

Essentials of Programming Languages (3ed) 已经是许久以前读的了, 现在记下一些东西, 或许对于后来者有用.

第1章 归纳性的数据集合

引入了数据的归纳 (或者说递归) 定义, 尤其是BNF文法, 并介绍了与之匹配的编程技术和证明技术 (结构归纳法).

第2章 数据抽象

引入了数据抽象的想法, 也就是抽象数据类型和其实现的分离; 介绍了一个定义数据类型的工具, 以及解构的工具; 引入了抽象句法树的想法, 为之后的章节做铺垫.

第3章 表达式

引入了解释和编译的基本想法, 然后为几个小语言编写了解释器. 介绍了什么是词法作用域 (和动态作用域), 引入了词法寻址 (lexical addressing) 的想法. 在某种意义上, 这就是一个很好的编译的例子.

第4章 状态

引入了副作用, 其实就是赋值. 引入了两种不同的语言, 一种显式操作引用 (类似于SML那种), 还有一种和通常的赋值类似. 介绍了一些不同的参数传递机制, 例如按引用调用, 按名调用等.

第5章 延续传递解释器

介绍了延续和延续传递风格 (CPS), 将之前的解释器改为CPS风格的. 对于通常的没有尾调用优化的语言, 引入了蹦床的想法. 使用延续实现了异常和多线程机制.

第6章 延续传递风格

本章围绕着如何进行延续传递风格变换进行.

第7章 类型

介绍了类型, 将类型视为一种静态预测, 即良类型的程序在运行时不会出现类型错误. 之后介绍了最基本的类型检查还有类型推导 (通过合一) 的想法.

第8章 模块

第9章 对象和类