知识全景图/ 学科主线/ 大学计算机专业课程/ 编译原理、运行时与语言实现课群
Compiler Principles · Runtime

大学计算机编译原理、运行时与语言实现课群

这页补大学计算机专业里最容易被误读的一门系统课:编译原理。它不是只写一个 parser,也不是只背龙书目录;它回答课程视角的问题:人写的源代码怎样被机器理解、检查、优化并执行,为什么词法、语法、AST、符号表、类型检查、IR、优化、代码生成、链接加载、JIT、GC 和运行时会共同决定程序行为。

核心系统课
承接离散数学、自动机、数据结构和操作系统,连接语言、运行时和性能分析
一条翻译链
源文本、Token、AST、语义、IR、优化、后端、运行时
关键能力
把“代码为什么这样报错 / 这样优化 / 这样慢 / 这样运行”拆回语言实现层
继续下钻
课程路线在本页,编译器设计、语言设计和运行时差异回到 `pages/tech/engineering/`
一、这组课共同回答什么问题

编译原理的核心不是“把代码变成机器码”这么窄,而是把人写的文本逐步变成可信结构、可验证语义、可执行计划和可诊断错误。

从文本到结构
源代码先被切成 Token,再按语法组织成 AST。这里决定编译器能否读懂程序、定位错误、恢复解析,并给 IDE、格式化器、静态检查提供结构基础。
源文本 Token AST 诊断
从结构到执行
AST 还不是可执行程序。编译器还要解析名字、检查类型、生成 IR、做优化、选择后端,并把程序交给解释器、VM、机器码或运行时。
符号表 类型检查 IR 优化 / 后端 运行时
一句话判断:如果你只会写 parser,但解释不了符号表、类型检查、IR、优化、ABI、JIT、GC 和错误诊断分别在保护什么,编译原理还没有真正学完。
二、核心课程怎么分工
课程 / 模块主问题关键对象继续下钻
形式语言与自动机基础语言结构怎样被形式化识别正则语言、上下文无关文法、自动机、递归、栈理论计算机科学课群
词法分析字符流怎样变成 Token 流关键字、标识符、字面量、操作符、行列号、错误字符如何设计编译器
语法分析与 ASTToken 怎样组织成程序结构文法、优先级、结合性、递归下降、Pratt parser、AST、错误恢复编译器设计训练
语义分析与类型检查名字和类型怎样被验证符号表、作用域、类型系统、类型推导、泛型、错误诊断编程语言设计
IR 与优化程序怎样变成更适合优化和执行的中间表示IR、SSA、常量折叠、死代码消除、内联、逃逸分析、寄存器分配编译器与运行时底座
代码生成、链接与加载执行形式怎样落到机器、VM 或解释器字节码、机器码、ABI、调用约定、栈帧、动态库、加载器运行时底座
运行时系统程序执行时还需要哪些语言服务JIT、GC、对象布局、协程、事件循环、GIL、异常、调试信息性能工程
三、按学习阶段怎么推进

第一阶段:先懂语言和文法

把正则、文法、递归、栈、表达式优先级和 AST 先接起来。这里不是为了做题,而是理解为什么程序文本能被稳定解析。

理论课群词法 / 语法AST

第二阶段:进入语义和类型

能 parse 不等于程序正确。符号表、作用域、类型检查、错误提示和源位置映射,决定编译器能不能提前阻止错误。

语言设计符号表类型检查

第三阶段:理解 IR、优化和后端

IR 是从“语言结构”到“执行计划”的桥。优化不是炫技,而是在语义不变的前提下降低执行成本,并保留可诊断性。

第四阶段:接入运行时和工程工具链

JIT、GC、对象布局、ABI、异常、调试信息和 profiler,把编译原理和操作系统、体系结构、多语言对比接到一起。

四、真实卡点该回到哪门课
现象优先回到哪门课为什么不要只做
写了 parser,但一遇到复杂表达式就乱语法分析 + 表达式优先级优先级、结合性、括号、递归和错误恢复没有设计清楚继续堆 if else
语法能过,但字段名、作用域、类型经常错符号表 + 类型检查名字解析、作用域、类型兼容和错误提示属于语义分析,不是 parser 能单独解决的等运行时报错
优化后结果错了IR + 语义保持优化必须证明语义不变;副作用、求值顺序、空值和异常都可能让优化不安全只看性能提升
同一段代码 debug 和 release 表现差很远优化 + 代码生成内联、逃逸、死代码、寄存器分配、边界检查消除都会改变执行路径只怪编译器玄学
Java 服务预热后变快,冷启动慢JIT + 运行时热点收集、分层编译、类加载、代码缓存和连接池预热共同影响启动窗口用第一分钟代表稳态
跨语言调用或 native 扩展偶发崩溃ABI + 调用约定 + 运行时边界类型布局、栈帧、符号、动态库版本和内存所有权都可能不匹配只看上层异常日志
五、这页和其他课程页怎么分工
页面负责什么什么时候看
本页:编译原理、运行时与语言实现课群负责把编译原理按大学课程顺序、语言实现对象和工程卡点接成学习路线你要补大学编译原理,而不是直接写一个工业编译器时
组成原理、体系结构与数字硬件课群负责机器表示、指令、内存层级和硬件结构对代码生成的约束你想知道编译原理怎样落到真实机器时
操作系统课群负责运行时使用线程、内存、文件、系统调用和资源隔离的方式你想知道程序执行怎样依赖 OS 时
如何设计编译器负责用 LedgerRule 贯穿源码、Token、AST、符号表、类型检查、IR、优化、代码生成和诊断你想从一个小语言亲手走完整条编译器设计链时
理论计算机科学课群负责把自动机、形式语言、逻辑、类型和可计算性作为编译原理的理论基础你要解释类型检查、优化正确性和静态分析怎样约束程序性质时
编译器与运行时底座负责语言运行时、JIT、GC、对象布局、ABI、多语言性能和并发差异你要解释语言生态为什么表现不同,或排查运行时性能时
如何设计一门编程语言负责语言目的、语法、语义、类型、错误提示、执行模型和工具链的上游设计你还没想清楚语言要表达什么、为什么需要这门语言时
六、最小读法
学生课程路线
先形式语言和文法,再词法语法与 AST,然后符号表和类型检查,接着 IR、优化和代码生成,最后把 JIT、GC、ABI 和运行时接上。
文法Token / AST符号表类型检查IR优化 / 后端运行时
工程回读路线
从一次“程序为什么这样运行”倒着看:错误提示、类型边界、生成代码、运行时调度、GC、系统调用和性能 profile,每层都能回到编译原理。
定位: 这页是大学计算机专业课程页的第二层下钻,负责把编译原理、语言实现和运行时系统放回课程依赖图;具体编译器设计、语言设计、JIT / GC / ABI / 多语言运行时差异仍回到 `pages/tech/engineering/` 维护。
回到大学计算机专业课程 / 进入组成原理、体系结构与数字硬件课群 / 进入理论计算机科学课群 / 进入操作系统、进程线程、内存与并发课群 / 进入操作系统、进程线程、内存与并发课群 / 进入编译器与运行时底座 / 回到知识全景图