Essentials of Programming Languages (3ed) 已经是许久以前读的了, 现在记下一些东西, 或许对于后来者有用.
引入了数据的归纳 (或者说递归) 定义, 尤其是BNF文法, 并介绍了与之匹配的编程技术和证明技术 (结构归纳法).
引入了数据抽象的想法, 也就是抽象数据类型和其实现的分离; 介绍了一个定义数据类型的工具, 以及解构的工具; 引入了抽象句法树的想法, 为之后的章节做铺垫.
引入了解释和编译的基本想法, 然后为几个小语言编写了解释器. 介绍了什么是词法作用域 (和动态作用域), 引入了词法寻址 (lexical addressing) 的想法. 在某种意义上, 这就是一个很好的编译的例子.
引入了副作用, 其实就是赋值. 引入了两种不同的语言, 一种显式操作引用 (类似于SML那种), 还有一种和通常的赋值类似. 介绍了一些不同的参数传递机制, 例如按引用调用, 按名调用等.
介绍了延续和延续传递风格 (CPS), 将之前的解释器改为CPS风格的. 对于通常的没有尾调用优化的语言, 引入了蹦床的想法. 使用延续实现了异常和多线程机制.
本章围绕着如何进行延续传递风格变换进行.
介绍了类型, 将类型视为一种静态预测, 即良类型的程序在运行时不会出现类型错误. 之后介绍了最基本的类型检查还有类型推导 (通过合一) 的想法.