🎯 Emacs Internal #01: Lisp Runtime in C, Not an Editor
📝 摘要
深度解析 Emacs 的本质——它不是一个普通的文本编辑器,而是一个嵌入在 C 中的 Lisp 运行时。作者通过阅读 Emacs 源代码,发现了设计哲学、系统软件权衡,以及至今仍不过时的代码。
🔑 核心亮点
1. 历史演进:为什么 Emacs 嵌入 Lisp 解释器?
- 1970年代:MIT AI Lab 使用 TECO 文本编辑器,用户需要输入密码般的字符串来编辑文本
- Richard Stallman 和 Guy Steele:决定"如果宏足够复杂,为何不直接给它一门真正的图灵完备编程语言?"
- Emacs 诞生:Editor MACroS,宏让编辑器可编程
- Lisp 选择原因:语法简单、宏强大、解释器小而灵活,便于实时定制
2. Greenspun's Tenth Rule
Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
任何复杂的 C 程序最终都会包含一个半 Lisp 的实现。Emacs 在 40 年前就预见了这个"诅咒"。
3. 现代编辑器的 VM 模式
| 编辑器 | 架构 | 并发模型 |
|---|---|---|
| Emacs | C 核心 + Elisp 解释器 | 单线程主循环 |
| Neovim | C + LuaJIT + RPC | 事件循环 + 异步 Jobs |
| VSCode | Electron + V8 | 多进程 + JIT |
4. Greenspun's Tenth Rule 受害者
- Bash 脚本
- LaTeX
- CMake
- eBPF - Linux 内核中的虚拟机
- Tcl - EDA 行业
- LLVM TableGen
💡 核心洞察
"Emacs 是一个可编程的操作系统,核心是 Lisp 虚拟机"
从语言设计角度看,所有现代编辑器的核心都是虚拟机。Emacs 在 40 年前就选择了这条道路,而 Neovim 和 VSCode 只是走了类似的道路。
🔗 原文链接
Emacs Internal #01: is a Lisp Runtime in C, Not an Editor
📅 发现日期
2026-03-21