编程语言理论

类型系统、范式、λ演算 — 表达计算的语法

14 个节点 入门 1 进阶 5 高级 8

知识结构

学习路径

1
编程语言范式概述

编程范式(Programming Paradigm)是编写程序的"思维模式"——命令式、面向对象、函数式、逻辑式,每种范式对"计算是什么"有不同理解

#pl#paradigm 5 个子节点
入门
2
变量、作用域与绑定

作用域(Scope)决定变量在哪些区域可见——静态作用域看代码结构,动态作用域看调用链。绑定(Binding)是把名字和实体关联起来的过程

#pl#scope#binding 1 个子节点 1 个前置
进阶
3
求值策略(传值、传引用、惰性求值)

求值策略决定函数调用时参数的计算方式——传值(值拷贝)、传引用(地址)、传共享(对象引用)、惰性求值(需要时才算)

#pl#evaluation 2 个子节点 1 个前置
进阶
4
高阶函数与闭包

高阶函数是把函数当成"一等公民"——函数可以作为参数传递、作为返回值返回。闭包(Closure)是函数 + 捕获的环境

#pl#functional#closure 1 个子节点 1 个前置
进阶
5
Lambda 演算基础

Lambda 演算(λ-calculus)是函数式编程的理论基础——只用三样东西(变量、抽象、应用)就能表达一切计算

#pl#lambda#theory 1 个前置
高级
6
代数数据类型与模式匹配

代数数据类型(Algebraic Data Type, ADT)用"组合"的方式构造类型——积类型(Product)是 AND,和类型(Sum)是 OR。模式匹配(Pattern Matching)是解构 ADT 的优雅方式

#pl#types#pattern-matching 1 个子节点 1 个前置
进阶
7
惰性求值与无穷数据结构

惰性求值(Lazy Evaluation)让表达式在需要时才计算——这让"无穷"数据结构成为可能,也避免了不必要的计算

#pl#lazy#functional 1 个前置
高级
8
静态 vs 动态类型

静态类型在编译时检查类型,动态类型在运行时检查——静态类型更安全但编写时约束多,动态类型更灵活但运行时可能暴露错误

#pl#type-system 2 个子节点 1 个前置
进阶
9
类型推导与多态

类型推导(Type Inference)让编译器自动推断类型——你不用写 `int x = 1` 中的 int。参数多态(泛型)让函数对不同类型都适用

#pl#type-inference#polymorphism 1 个前置
高级
10
子类型与变型(协变/逆变)

子类型(Subtyping)是类型之间的"is-a"关系——Cat 是 Animal 的子类型。变型(Variance)描述容器类型在子类型关系下的行为

#pl#subtyping#variance 1 个前置
高级
11
操作语义(小步/大步)

操作语义(Operational Semantics)用"程序如何一步步执行"来定义语言的含义——小步语义一次一步,大步语义一次到最终结果

#pl#semantics 1 个前置
高级
12
垃圾回收机制

垃圾回收(Garbage Collection, GC)自动回收不再使用的内存——程序员不用手动 free/delete。标记-清除、复制、分代回收是三种主要算法

#pl#gc#memory 1 个子节点 1 个前置
高级
13
并发编程模型(Actor, CSP)

并发模型解决了"多个执行流怎么协作"的问题——Actor 模型通过消息传递(Erlang、Akka),CSP 通过通道(Go、Clojure),共享内存通过锁(Java、C++)

#pl#concurrency#actor#csp 1 个前置
高级
14
领域特定语言(DSL)

DSL(Domain-Specific Language)是为特定领域设计的专用语言——SQL 是数据查询 DSL,正则表达式是文本匹配 DSL,HTML 是页面结构 DSL

#pl#dsl 1 个前置
高级