首页 › programming › 手搓一门语言:编译器七强精读

手搓一门语言:编译器原理七强精读

本期概述

在 AI 编码助手几乎能替你写出大半业务代码的 2026 年,一个反直觉的趋势正在悄然复兴:越来越多的工程师开始「手搓」自己的编程语言。从 DSL(领域专用语言)到嵌入式脚本引擎,从游戏热重载脚本到 AI Agent 的工作流描述语言,「造一门语言」不再是编译器课程里纸上谈兵的习题,而是日常工程中真实存在的需求——当你需要给非技术人员暴露一套规则配置、给策划同学一套关卡脚本、或者给大模型一套可验证的指令语义时,一个几百行就能跑起来的小解释器,往往比硬塞 YAML 或 JSON 更优雅。

本期(第 2 轮 · programming 分类)避开已被反复讨论的「AI 写代码」话题,深入一个更底层、更朴素也更长久有效的方向:编程语言到底是怎么被造出来的。我们从词法分析一路讲到字节码虚拟机与机器码生成,精选 7 个在 YouTube 上以「把黑盒拆给你看」著称的频道与系列,覆盖理论奠基、端到端实战、编译后端、底层汇编靶机、真实运行时内幕与手把手入门全链路。无论你是想为产品做一套 DSL,还是单纯想看穿 Python/Rust 那个「魔法盒子」,这一期都能给你一张可落地的学习地图。

本期核心发现:高质量的语言实现内容,几乎都遵循同一条「流水线」结构(词法 → 语法树 → 语义 → IR → 代码生成 → 运行时),而不同频道恰好分别守在流水线的不同工位上——把它们按阶段拼起来,就是一份完整的「自己造语言」课程。

频道 / 视频对比一览

# 频道 代表视频 / 系列 聚焦流水线阶段 风格定位 适合人群
1 Computerphile Parsing Explained 语法分析(理论) 英伦学院派、短小精悍 想夯实理论根基者
2 CodePulse Let's Read "Crafting Interpreters" 端到端(树遍历解释器) 跟读式、慢节奏 想完整走通一遍者
3 Tsoding A small C compiler / Compiler From Scratch 编译后端、代码生成 直播切片、硬核实战 想啃机器码生成者
4 Creel Creel Academy of Computer Science 底层汇编 / 目标靶机 表演型、高信息密度 想理解「编译给谁」者
5 Low Level Learning How Compilers Actually Work 概念全景 动画图解、入门友好 零基础系统好奇者
6 mCoding How Python Works / Internals of Python 真实运行时与字节码 工程严谨、细节控 Python 进阶开发者
7 Toby Ho Make Your Own Language 系列 前端(Lexer 起步) 极简手把手 想从零动手写第一行者

说明:订阅数随时间波动,下文标注均为近期近似值,仅作量级参考。

一、Computerphile ·《Parsing Explained》——理论奠基的「定海神针」

频道:Computerphile(英国诺丁汉大学出品,约 240 万订阅)
代表视频:《Parsing Explained》(youtube.com/watch?v=bxpc9Pp5pZM),由 Prof. Brailsford 主讲,另有姊妹篇《Parsing - Computerphile》及《Same Story, Different Notation》。

如果你只能看一个视频来理解「解析」这件事,Brailsford 教授的这期几乎是无脑首选。它的价值不在代码量,而在把最危险的概念陷阱讲透——为什么「歧义(ambiguity)」是编译器的头号敌人。教授用白板和粉笔,从上下文无关文法讲到移进-归约的取舍,告诉你同一句代码可以对应多棵语法树,而多棵树就意味着语义不确定、程序行为不可预测。

关键洞察:解析的本质是「给字符流赋予唯一结构」。Recursive Descent(递归下降)之所以在现代手写解析器里卷土重来(GCC、V8、Clang 都大量使用),正是因为它的可读性和错误恢复能力远胜于机械生成的 LALR 表。Brailsford 不直接下结论,却把选择背后的权衡摊在你面前。

实用价值:当你为自己造的小语言设计语法时,这期视频能帮你提前避坑——避免设计出二义文法、避免运算符优先级解析错误。适合人群:所有想从「会调 API」升级到「懂原理」的开发者,尤其推荐给面试前补 CS 基础的人。

二、CodePulse ·《Let's Read "Crafting Interpreters"》——端到端走通第一遍

频道:CodePulse(@CodePulse,数万订阅,由一位兴趣横跨经济学、加密与软件工程的工程师主理)
代表视频:系列开篇《Let's Read "Crafting Interpreters" together》(youtube.com/watch?v=1mQwQCZoQnw),系统跟读 Robert Nystrom 的经典免费著作《Crafting Interpreters》(craftinginterpreters.com)。

《Crafting Interpreters》被公认为「造语言」领域最友好的入门圣经,它先用 Java 带你写出一个树遍历解释器 jlox,再用 C 重写成一个字节码虚拟机 clox。但这本书信息密度极高,独自啃容易半途而废。CodePulse 的系列价值就在于「读书会陪练」——每一章都拆成一期视频,逐节讲解、逐行实现,把作者偶尔跳过的细节补齐。

关键洞察:语言的「两遍实现」哲学。第一遍求正确与简洁(树遍历,直接在 AST 上求值),第二遍求性能(字节码 + 栈式虚拟机)。这种「先让它对,再让它快」的渐进式工程观,远比一上来就追求最优来得实用,也暗合了现代工业编译器的分层设计(如解释器 + JIT)。

实用价值:跟着这个系列走完,你能真真切切产出一个可运行的小语言解释器,理解闭包、垃圾回收、变量解析等机制如何落地。适合人群:有面向对象语言基础、想完整拥有一个「自己造的语言」的工程师,耐心比天赋更重要。

三、Tsoding ·《A small C compiler / Compiler From Scratch》——啃下编译后端这块硬骨头

频道:Tsoding(直播主 Alexey,数十万订阅,以高强度 Twitch 直播切片闻名)
代表视频:《A small C compiler》(youtube.com/watch?v=_dVchhnO_KI,数月内累计数万观看) 以及播放列表《Compiler From Scratch》(用 C 从零为 COOL 语言构建编译器)。

当多数教程停在「生成 AST 就算结束」时,Tsoding 直接把战场拉到最硬核的后端——寄存器分配、栈帧布局、x86-64 指令发射、与系统调用 ABI 的对齐。他的风格是典型的「直播流式硬核」:没有精美剪辑,有的是真实的卡壳、调试、objdump 反汇编对照、一行行把高级结构翻译成机器码的现场推演。

关键洞察:编译后端的本质是「资源约束下的翻译」。寄存器只有那么几个,调用约定(calling convention)规定了参数怎么传、栈怎么对齐,代码生成的过程就是不断在这些硬约束下做妥协。看 Tsoding 把一个 if-else 编成条件跳转指令、把函数调用编成 call 与栈帧操作,你会第一次真正理解「函数调用在机器层面到底发生了什么」。

实用价值:这是通往系统级编程、JIT 实现、甚至理解 WebAssembly 后端的必经之路。适合人群:有 C 语言与汇编基础、能忍受「无剧本直播节奏」的硬核玩家,回报是对底层近乎透明的理解。

四、Creel ·《Creel Academy of Computer Science》——理解「编译给谁」的汇编靶机

频道:Creel(@WhatsACreel,约 10.4 万订阅,据 DeveloperEducators 数据位列同类前 14% 互动率)
代表内容:《Creel Academy of Computer Science》播放列表(39 期系统课程)以及大量 x64 汇编提速教程。

造语言不能只懂「翻译」,还得懂「翻译给谁」——目标机器。Creel 的频道几乎就是这个角色的最佳讲解员:他用充满感染力的节奏,把 x64 指令集、寄存器、SIMD、内存对齐讲得像动作片一样紧凑。他的《Academy of Computer Science》系列更像一份自洽的 CS 速成课,从位运算到汇编再到性能优化层层递进。

关键洞察:高级语言的每一条语句,最终都是对一组寄存器与内存操作的「压缩表达」。理解汇编不是为了手写汇编,而是为了在性能瓶颈出现时,能看懂编译器生成的代码、能判断是算法问题还是底层未优化、能在 profiler 指向某条热点指令时读懂它在做什么。

实用价值:性能调优、逆向分析、嵌入式开发的底层弹药库。适合人群:游戏与图形开发者、性能敏感场景工程师、以及所有好奇「CPU 真的在干什么」的人。

五、Low Level Learning ·《How Compilers Actually Work》——概念全景的动画图解

频道:Low Level Learning(@LowLevelLearning,数十万订阅,与 Low Level Academy 同属「把机器讲明白」的阵营)
代表内容:《How Compilers Actually Work》及相关「计算机到底怎么工作」系列,以动画化图解著称。

如果你觉得 Tsoding 太硬、Computerphile 太学术,Low Level Learning 恰好填在中间——它用大量动画把「词法分析 → 语法分析 → 语义分析 → 优化 → 代码生成」整条流水线画给你看,让抽象阶段变成可视的「数据在管线里流动」。它不追求让你立刻能写,而是先帮你建立正确的心理模型。

关键洞察:编译不是一步魔法,而是一条可拆解、可单独优化的流水线。每个阶段(pass)都有清晰的输入输出契约,前端的产物是 Token 与 AST,中端是 IR 与优化,后端是目标代码。理解了这条流水线,你才能定位「我卡在哪一环」。

实用价值:作为进入任何一本编译器教材前的「导览图」,大幅降低后续学习的认知陡坡。适合人群:零基础、被「编译原理」四个字吓退过的同学,是最佳破冰入口。

六、mCoding ·《How Python Works / Internals of Python》——真实运行时与字节码内幕

频道:mCoding(@mCoding,顾问工程师 James Murphy 主理,数十万订阅)
代表内容:《How Python Works》播放列表、《Internals of Python - Part 1 - How Python code gets executed》(youtube.com/watch?v=cYOr5VjukAI) 等。

造语言的理论看多了,容易陷入「纸上谈兵」。mCoding 的最大价值是把你拉回真实工业级运行时:Python 源码如何被编译成 .pyc 字节码、CPython 的 PVM(Python Virtual Machine)如何用一个大 switch 循环逐条解释字节码、帧对象、LOAD_FAST / CALL 等指令到底操纵了什么。James 的讲解以工程严谨著称,连 Python 语言的一些「怪癖」和「gotcha」都从字节码层面给出解释。

关键洞察:现代动态语言几乎都是「编译器 + 虚拟机」的组合,而非纯粹的「解释执行」。Python 先编译再解释,JIT(如 PyPy、新版 CPython 的自适应解释器)则更进一步在运行时把热点编译成机器码。看懂 CPython 字节码,你就拥有了「用 dis 模块诊断性能、读懂异常栈、理解装饰器与生成器底层机制」的超能力。

实用价值:直接服务于 Python 性能优化、调试、以及为 Python 写 C 扩展的场景。适合人群:Python 中高级开发者、数据/AI 工程师——你的日常工具,值得看穿它的底牌。

七、Toby Ho ·《Make Your Own Language》——从第一行 Lexer 开始动手

频道:Toby Ho(JS 社区老兵,数万订阅)
代表内容:《Make Your Own Language》系列,第 1 期《The Lexer》(youtube.com/watch?v=Xu4RtLlm42I),后续涵盖函数调用解析等。

如果你已经被前六个频道撩拨得手痒,Toby Ho 的系列就是最好的「立刻动手」入口。他从最朴素的 Lexer(词法分析器)讲起,用一个极简的实现把字符流切成 Token,没有任何繁复的依赖,几行代码就能跑通。他的教学哲学是「最小可运行增量」——每期只前进一小步,但每一步都能看到输出。

关键洞察:词法分析的本质是「模式匹配 + 状态机」。一个 Lexer 不过是一段「读到这个字符就进入这个状态、读到那个字符就产出这个 Token」的循环。一旦你在几十行代码里亲手写出来,过去觉得神秘的 Token、 lookahead、最长匹配等概念就全部祛魅了。

实用价值:最适合作为周末项目的起点——用一个晚上写出能解析四则运算的 Lexer,下个周末加上 Parser,再下个周末让它能求值。适合人群:所有想「今天就动手」的动手派,尤其适合用 JavaScript/动态语言入门的同学。

知识结构图:编译流水线与频道工位映射

flowchart LR
    A["源代码 Source"] --> B["词法分析 Lexer<br/>Toby Ho / Low Level Learning"]
    B --> C["Token 流"]
    C --> D["语法分析 Parser<br/>Computerphile"]
    D --> E["AST 抽象语法树"]
    E --> F["语义分析 / 类型检查<br/>CodePulse (jlox)"]
    F --> G["中间表示 IR"]
    G --> H["优化 Optimization<br/>Tsoding"]
    H --> I["代码生成<br/>Tsoding / Creel (x64)"]
    I --> J["字节码 / 机器码"]
    J --> K["运行时 VM/解释器<br/>mCoding (CPython PVM)"]

    style B fill:#e1f5ff
    style D fill:#fff4e1
    style F fill:#e8f5e9
    style I fill:#ffe1e1
    style K fill:#f3e1ff

这张图揭示了一个朴素但关键的道理:没有哪个频道能独自讲完整条流水线,但把它们按阶段拼接,就是一份比任何单本教材都更立体的「造语言」课程。 推荐的学习路径是「先 Low Level Learning 建立全景 → Computerphile 夯实解析理论 → Toby Ho 动手写 Lexer → CodePulse 走通完整解释器 → Tsoding 攻克后端 → Creel 补足汇编靶机 → mCoding 回到真实工业运行时印证」。

为什么 2026 年值得「造一门语言」

把视角拉远一点:在 AI 大模型时代,「语言」的定义正在膨胀。Prompt 本质上是一种非确定性语言,DSL 是确定性语言,而把确定性 DSL 嵌入到 AI Agent 工作流里(让模型生成可校验、可执行的指令)正成为 Agent 可靠性的关键工程实践。当你亲手造过一门语言,你就能更清醒地判断:哪些规则应该用确定性语言硬约束,哪些应该交给概率性的模型;哪种场景该用 AST 校验输出,哪种场景该用沙箱化字节码执行。

这正是本期选择「编译器原理」而非又一个 AI 话题的原因——底层原理的半衰期,远长于任何具体框架。你今天学会的词法分析,十年后依然适用;而你今天熟练的某个前端框架 API,三年后可能就换了名字。

延伸推荐(3 个进阶频道)

参考来源

  1. Computerphile - Parsing Explained — Brailsford 教授讲解解析与文法歧义,理论奠基首选。
  2. CodePulse - Let's Read "Crafting Interpreters" — 系统跟读 Robert Nystrom 经典著作,端到端实战。
  3. Tsoding - A small C compiler — 直播切片式硬核编译后端实现。
  4. mCoding - Internals of Python: How Python code gets executed — CPython 字节码与 PVM 运行时内幕。
  5. Toby Ho - Make Your Own Language 1: The Lexer — 极简手把手从 Lexer 起步入门。

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入