编程语言理论
类型系统、范式、λ演算 — 表达计算的语法
知识结构
学习路径
编程范式(Programming Paradigm)是编写程序的"思维模式"——命令式、面向对象、函数式、逻辑式,每种范式对"计算是什么"有不同理解
作用域(Scope)决定变量在哪些区域可见——静态作用域看代码结构,动态作用域看调用链。绑定(Binding)是把名字和实体关联起来的过程
求值策略决定函数调用时参数的计算方式——传值(值拷贝)、传引用(地址)、传共享(对象引用)、惰性求值(需要时才算)
高阶函数是把函数当成"一等公民"——函数可以作为参数传递、作为返回值返回。闭包(Closure)是函数 + 捕获的环境
代数数据类型(Algebraic Data Type, ADT)用"组合"的方式构造类型——积类型(Product)是 AND,和类型(Sum)是 OR。模式匹配(Pattern Matching)是解构 ADT 的优雅方式
类型推导(Type Inference)让编译器自动推断类型——你不用写 `int x = 1` 中的 int。参数多态(泛型)让函数对不同类型都适用
子类型(Subtyping)是类型之间的"is-a"关系——Cat 是 Animal 的子类型。变型(Variance)描述容器类型在子类型关系下的行为
操作语义(Operational Semantics)用"程序如何一步步执行"来定义语言的含义——小步语义一次一步,大步语义一次到最终结果
垃圾回收(Garbage Collection, GC)自动回收不再使用的内存——程序员不用手动 free/delete。标记-清除、复制、分代回收是三种主要算法
并发模型解决了"多个执行流怎么协作"的问题——Actor 模型通过消息传递(Erlang、Akka),CSP 通过通道(Go、Clojure),共享内存通过锁(Java、C++)
DSL(Domain-Specific Language)是为特定领域设计的专用语言——SQL 是数据查询 DSL,正则表达式是文本匹配 DSL,HTML 是页面结构 DSL