程序设计语言与解释器总笔记
课程笔记串联语法、语义、类型、存储、并发与解释器项目。
关联:全课程
程序设计语言与解释器总笔记
主线
全课依次为:语法、词法与抽象语法树、名字、作用域与绑定、操作语义与求值策略、函数、闭包与递归、类型系统与类型推导、代数数据类型与模式匹配、对象、类与消息传递、函数式编程与惰性、逻辑与声明式计算、内存模型与垃圾回收、并发语义与效应、解释器综合项目。始终沿源码→token→AST→绑定环境→类型判断→求值状态→存储/并发配置→观察结果与诊断推进。每条语义规则写前提、结论和失败边界,每个实现用正常例、边界例、反例与可运行测试验收。
环境与求值
名字通过环境ρ映射到位置或值,闭包保存代码与定义处环境。大步语义回答最终值,小步语义展示每一步机器状态;按值、按名与按需的差异必须通过副作用次数反查。
类型与数据
类型判断写作Γ ⊢ e : τ;约束生成后用统一求解。代数数据类型由构造器形成,模式匹配必须检查穷尽与冗余。对象语义围绕身份、字段、消息与动态分派。
存储与并发
存储σ把位置映射为值,GC从根集追踪可达对象。并发配置需枚举允许交错,原子性通过线性化点解释。所有优化都必须保持目标语言可观察行为。
项目验收
综合解释器应能从空环境启动,给出确定诊断,运行公开与隐藏测试,并交付语言规格、AST、求值器、类型器、内存模型、trace和复现说明。
逐章复盘方法
每章结束后,从一个不超过十个节点的小程序重新走完整流水线:手工写token、AST、自由变量、环境帧、类型判断和至少三步求值状态;再加入未绑定名字、错误类型或副作用,指出第一次失败的规则。实现题保留标准输入、标准输出、四个以上测试和一次本地参考运行记录。综合项目每次扩展语法时同步更新规格、AST、解析、类型、求值、诊断与回归测试,禁止只改解析器让后端猜测。最后换一种表面语法重做同一语义,再保持语法相似而改变求值策略,以此区分偶然写法与真正语言规则。复盘结论必须能由同伴按照推导树复现;若只能解释最终值,就补环境与存储快照;若错误只写“语法不对”,就补精确源区间、期待集合与恢复位置。