正在翻开……

新神借旧躯

基于「传统计算机科学的智慧」· Claude Code 源码分析 · 2025

Claude Code 的源码被公开了。仔细研究了下,发现 2026 年最前沿的 AI 工程问题,用的全是上世纪的武器。

1969 Copy-on-Write → 2025 投机执行的文件隔离

在文件操作里,我撞见了 70 年代的 Copy-on-Write。

为了不弄脏你的源码,speculation.ts 像个谨慎的图书管理员——非到动笔那一刻,绝不肯复印原件。投机执行时,AI 在一个叫 overlay 的「影子目录」里干活。你的真实文件系统纹丝不动。只有当你说「Accept」,修改才被合并回来。

这种对资源的抠搜和克制,在 200K Context 的狭窄窗口里,竟成了最优雅的安全围栏。

点击下方三个阶段标签,看看一次投机执行中文件系统的状态——注意哪些文件被复制了,哪些从头到尾只存在一份:

点击标签切换阶段

看到了吗?「共享」阶段,overlay 是空的。只有当 Claude 写入 index.ts 时,copyFile() 才被触发。而 package.jsonutils.ts 始终没被碰过——从头到尾只存在一份。

五十六年前的原则——非到万不得已,绝不动手——在 AI Agent 的文件系统里,仍然是最优解。

Copy-on-Write 管的是「别浪费空间」。但如果空间本身就不够呢?

1970s 虚拟内存 → 2025 Token 预算管理

甚至连 Token 的溢出处理,都透着一股 Virtual Memory 的陈年旧味。

你的电脑有 16GB 内存,但同时开着的程序远超 16GB。1970 年代的操作系统工程师发明了一整套分级应急机制:先驱逐冷页,不够就 swap 到磁盘,再不够就碎片整理,实在不行——OOM Killer 直接杀进程。从温柔到暴力,层层升级。

Claude Code 的上下文窗口只有 200,000 个 token。每轮对话都在往里塞东西。它的应急策略,和五十年前的虚拟内存一一对应——甚至连触发顺序都一样。

拖动下方的滑块,从左到右。左侧水箱是上下文压力,右侧是 1970s 虚拟内存和 2025 Claude Code 的对照表:

拖到最右边了吗?截断输出 → 驱逐旧消息 → 语义摘要 → OOM Kill。和操作系统的升级路径不仅逻辑对称,连顺序都一样

有限资源下的生存策略,半个世纪没变。变的只是名字:从 malloc() 变成了 maxTokensOverride

省着用是防守。下面这把刀,是进攻。

1980s CPU 投机执行 → 2025 Prompt Speculation

speculation.ts 里,我看到了 80 年代 CPU 的投机执行。

它在用户还没敲完回车时,就开始在影子系统里抢跑。用户上一句说「帮我重构 auth 模块」,它猜下一句大概率是「跑一下测试」——于是提前在 overlay 里执行 npm test。猜对了,结果直接注入,用户感觉瞬间完成。猜错了,overlay 丢弃,干干净净。

这哪是 AI 的预判?这分明是老派程序员对「算力换时间」的终极迷恋。

点击「下一步 →」,走过投机执行的五个阶段。第四步和第五步是两条分支——命中和未命中,对应 CPU 的 retire 和 squash:

1/5

注意第三步:Claude 在 overlay 里抢跑时,所有文件写入都重定向到 overlay——还记得第一把刀吗?投机执行的安全网,正是 Copy-on-Write 提供的。两个上世纪的技术,在 2025 年的同一个文件里配合工作。

用可能浪费的计算,换确定节省的等待。这笔账,CPU 算了四十年,Claude Code 接着算。

抢跑要快,前提是之前算过的东西能复用。最后一把刀。

1990s 多级缓存 → 2025 Prompt Cache 分层

90 年代,CPU 缓存定型为 L1/L2/L3 三级架构。L1 最快最小,每个核私有;L3 最大最慢,所有核共享。背后是一个永恒的工程直觉:把最常用的东西放在最近的地方。

Claude Code 的 Prompt Cache 用了完全相同的分层。promptCacheBreakDetection.ts 用 hash 做 cache tag,追踪命中率,检测 cache miss 时分析失效原因——和 CPU 的 cache coherence protocol 做的事一模一样。

点击下方两个视角标签,分别从「一个会话内」和「跨所有用户」的尺度看缓存层级——注意那条 DYNAMIC_BOUNDARY 分界线:

切到「跨用户」视角:system prompt 被 DYNAMIC_BOUNDARY 切成两段。上半段所有用户共享——L3。下半段每个会话独有——L1。tools 配置一改,tokenDrop 骤降,系统立刻检测到 cache miss,开始分析原因。

这不是「类似」cache coherence。这就是 cache coherence。只不过跑在 HTTP 请求上,而不是总线上。

前辈淌过的血,码过的砖

四把刀,横跨半个世纪。它们出现在同一个代码库里,不是因为致敬经典,而是因为问题的本质没有变过。

有限的资源需要分级管理。不确定的未来值得提前下注。重复的工作应该被缓存。代价高昂的操作应该尽量推迟。

这可能就是属于 Builder 的浪漫吧:我们是在开天辟地,但我们脚下踩着的,是前辈们淌过的血和码过的砖。

不用耗尽精力去追那些花里胡哨的新名词。在主线上「击穿」,往往只需要你捡起那把被前人磨得锃亮的旧刀,在新的战场上,再劈开一次虚妄。