首发于Continuation

编程语言相关的好书

(2020.5.15 更新,加入“形式验证”部分)

分为程序语言理论、编译原理、程序分析、形式验证四部分。不涉及“如何学习某一具体语言”

1. 程序语言理论

1.1 Learn from Lisp/Scheme

《计算机程序的构造和解释》(SICP)。函数式语言的“设计模式”

Essential of Programming Language, Mitch Wand and Dan Friedman。学究气少,在玩各种解释器的过程中自然就把很多概念都搞懂了~

1.2 类型与形式理论

Types and Programming Language, Bejamin Pierce. 到底什么是动态/动态类型,强/弱类型?类型推导/检查很困难么?

对这方面研究前沿感兴趣的同学,可以继续看 Advanced Topics of Types and Programming Language~

Semantics with Application [pdf] 形式化语义相关的。公式预警、、



Puerly Functional Data Structures ,Chris Okassaki的博士论文。函数式算法/数据结构的设计、实现。


2. 编译原理

2.1 传统向

Parsing Techniques。


《可变目标C编译器》。 这部书介绍了ANSIC编译器lcc的设计和实现,实践性很强。可与“虎书”结合看。


《高级编译器设计与实现》(鲸书)。龙书、虎书不再列出。

《现代体系结构的优化编译器》


2.2 虚拟机、GC等

《虚拟机——系统与进程的通用平台》


Garbage Collection——Algorithms for Automatic Dynamic Memory Management


The Garbage Collection Handbook: The Art of Automatic Memory Management


2.3 函数式语言相关

The Implementation of Functional Programming Languages, Simon Peyton Jones。SPJ对Haskell设计、实现、推广的贡献可排在前三。 这本书涉及模式匹配、惰性求值等“函数式特性”的实现,编译优化相关的不多。


Compiling with Continuation, Andrew Appel。这本书主要讲的是函数式语言的编译优化,作者参与了SMLNJ(Standard ML编译器)的开发。虽然后来又有了ANF变换,另外MLton的优化更多的基于SSA而非CPS。但是Continuatin的概念对程序语言的设计、实现意义深远。


3. 程序分析

在应用上,编译优化、硬件综合、形式验证、软件安全等都和程序分析紧密相连

假如做学术,可以投的会议很多,“硬至ASPLOS 软至POPL/PLDI,软件工程的ICSE/FSE,操作系统的OSDI/SOSP,通信安全的CCS,都可以投”.....


Principles of Program Analysis。 对数据流、控制流分析,抽象解释等都有涉及。因为示例语言比较简单,可能深度有所不够。


Static Program Analysis. Anders Molller的课程讲义(圈内认可度很高。。)

Static Single Assignment Book [ PDF]。 多位作者共同撰写。几乎所有的现代编译器,如GCC、LLVM都有将SSA技术的支持, 不仅是编译器,HotSpot JVM, .Net的Mono,Python的Pypy,这些虚拟机/解释器中的Just-in-Time Compiler也有了SSA的支持系统。本书系统地介绍了SSA,以及基于SSA的各种分析。

4. 形式验证

模型检查

定理证明

The calculus of computation: Decision procedures with applications to verification。它大概是目前市面上和SMT solving最直接相关的两本书之一(另一本是Decision Procedures: An algorithmic pointer of view)。侧重在形式验证中的应用,讲解了几个常用的一阶理, 涉及一些程序验证的经典概念和方法。

Certified Programming with Dependent Types: A Pragmatic Introduction to the Coq Proof Assistant 。关于基于Coq的交互式定理证明

编辑于 05-15

文章被以下专栏收录