Cloudflare 联合 VoidZero 发布 tsrs:AI 智能体数周写完 TypeScript 编译器的 Rust 移植
Cloudflare 与 VoidZero 发布 tsrs:TypeScript 编译器的 Rust 移植,官方称类型检查最快 8 倍,独立复现 5.3 倍。

tsrs 是 Cloudflare 联合 VoidZero 推出的 TypeScript 编译器 Rust 移植版,孵化在 Oxc 工具链项目里,以 Apache-2.0 许可开源在 oxc-project/tsrs 仓库(截至 2026-11-06 约 2,949 星)。据 Cloudflare 官方博客(2026-10-20),移植由 Owner.com 工程师 Max Schwenk 指挥以 Claude Opus 5.5 为核心的智能体在数周内完成,验收规范是 TypeScript 官方的 15,197 条一致性测试;官方称同 worker 数下类型检查最高提速 8 倍、峰值内存省约 70%。
要点
- 官方对 TypeScript 7.0 量出最高 8 倍提速、约 70% 省内存;独立基准对 7.0.2 复现出 5.3 倍,对更新的 7.1 beta 收窄到约 2.7 倍。
- 验收规范是 TypeScript 官方一致性测试的 15,197 条用例:首跑 78% 的错误基线逐字节一致,补上类型打印器后达到 99.97%。
- 它还在实验期:没有 watch 模式和语言服务器,类型报错时退出码是 2(tsc 是 1),按旧退出码写判断的 CI 脚本会把失败的检查当通过。
背景
tsrs 出现之前,TypeScript 编译器刚经历过一次大改写:微软把整个代码库从 JavaScript 移植到 Go,做成 TS 7(命令叫 tsgo),Cloudflare 博客称这次移植让 TypeScript 快了约 10 倍;InfoQ 引述 Owner.com 创始人 Peter Steinberger 的说法,专职团队花了约两年。tsrs 换了条路:语言设计不动,把类型检查器按 TS 7 的行为移植到 Rust。官方选 Rust 的理由是编译成 WebAssembly 后不需要带垃圾回收器,能跑进 Cloudflare Workers 和浏览器。公司层面,VoidZero——Vite、Rolldown、Oxc 背后的公司——2026 年 6 月并入 Cloudflare,tsrs 由个人实验升级为官方项目:起点是 Schwenk 在 9 月 30 日凌晨放手跑通宵的 Claude Opus 5.5 智能体集群,20 多个子智能体在并行 worktree 里同时开工,先定函数签名和契约、再并行填实现;仓库 10 月 1 日创建,Cloudflare 10 月 20 日发公告,同时宣布把 Theo Browne 的并行项目 tsc-rs 合并进来,做成一个带语言服务器和 source map 支持的统一包。
事实部分
官方数字来自 Cloudflare 博客(2026-10-20),基准配置与 TypeScript 团队协调过;下表是 Owner.com 工程笔记(2026-10-19)在约 37,000 个文件的 Olympus 单仓库上公布的实测。
| 配置 | 耗时 | 峰值内存 |
|---|---|---|
| TypeScript 7.0 单线程 | 80 秒 | 19 GiB |
| tsgo 7.0.2(4 checkers) | 61.4 秒 | 36.0 GiB |
| tsgo 7.0.2(8 checkers) | 56.6 秒 | 49.8 GiB |
| tsrs 0.14.0(4 checkers) | 8.75 秒 | 6.1 GiB |
| tsrs 0.14.0(8 checkers) | 5.80 秒 | 7.5 GiB |
一致性测试是整个项目最硬的部分:15,197 条用例沿用 Go 移植留下的验收套件,首跑 78% 的错误基线逐字节一致,加一个类型打印器后 13,462 条错误基线里除 4 条外全部对齐(99.97%)。工程门槛同样写死:每个优化单独 A/B,要求单线程指令数至少降 1%、墙钟时间至少降 2% 或峰值内存至少降 5%,且输出逐字节一致;每晚 20 万条变异输入做故障注入,unsafe 的 arena 代码过 Miri 检查。日常维护也交给了智能体:每天早上一个 agent 审上游 TypeScript 变更并开跟踪 issue,每晚重跑兼容矩阵。发布渠道是 npm,截至 2026-11-06,latest 标签是 0.22.0-ts7.1.0-beta(11 月 5 日发布),另有 @tsrs/wasm 包可跑在浏览器和 Workers 里。
三个数字分开读
tsrs 的三个性能数字对应三条不同基线,混进一条标题就会失真。
| 基准 | 对照版本 | 提速 | 峰值内存 |
|---|---|---|---|
| Cloudflare 官方(2026-10-20) | TypeScript 7.0 | 最高 8 倍 | 省约 70% |
| Frank Chu(dev.to,2026-10-21) | TypeScript 7.0.2 | 5.3 倍 | 省 72% |
| ImportStatic(2026-10-21) | TypeScript 7.1.0-beta | 2.86 倍 | 省 46–54% |
| Owner.com 17 个公开项目(2026-10-19) | 7.1 nightly(9 月 29 日) | 2.5–5 倍 | 省约 3 倍 |
Frank Chu 在 400 个文件、约 3.5 万行的合成项目上量出 5.3 倍(中位数 0.474 秒对 2.508 秒),emit 出的 400 个文件逐字节一致;ImportStatic 拿 TypeScript 自身源码(456 个文件、约 35 万行)对比 7.1.0-beta,量出 2.86 倍。收窄不是谁测错了:官方博客自己写明 7.1 beta 比 7.0 快最高 2.5 倍,其中一部分优化正来自 tsrs 的回馈——拿 8 倍向已经用 7.1 的团队宣传并不成立。
各方说法
围绕 tsrs,TypeScript 团队第一个公开回应。Daniel Rosenwasser 在 Hacker News(帖子 437 分、213 条评论)确认双方在合作,并说团队「目前怀疑速度并不只来自语言选择」,TS 7.1 变快变省的部分优化来自 tsrs 中发现的优化;他也认可 wasm 与 oxlint 集成对 Cloudflare 的需求是合理的,官方工具链会继续往快了做。Owner.com 创始人 Peter Steinberger 在 X 上说迁移后运行速度提升约 5 倍,并把数周的 AI 移植与微软两年的 Go 重写放在一起对照。HN 的技术质疑集中在内存模型:arena 分配基本不在检查中途释放内存,长驻进程里是否划算有争论;Cloudflare 的说明是默认「自适应配置」用更多内存换更快。InfoQ 中文版归纳的限制清单还包括 —init 与 —showConfig 不可用、诊断顺序可能与 tsc 不同。
怎么试
tsrs 的迁移路径分两步:还在 TS 5/6 的团队先迁到微软的原生 Go 版(TS 7),再沿用现有 tsconfig 直接换成 tsrs。命令两行:npm install -D tsrs,然后 npx tsrs -p . --noEmit。实验期有三件事要先进迁移清单:CI 判断从「退出码等于 1」改成「非零」,否则类型错误会被当成通过;诊断顺序可能与 tsc 不同,逐条 diff 报告的工具会受影响;watch 模式和语言服务器还没有,编辑器内的体验暂时仍靠 tsgo。想先看看再决定,可以在浏览器里直接跑 @tsrs/wasm。
编辑判断
tsrs 值得记下的不是 8 倍,而是「智能体写的编译器凭什么敢用」第一次有了工程答案:15,197 条一致性测试把验收变成可执行的规范,错误基线逐字节比对让偏差无处可藏,再配故障注入和 Miri——AI 输出可审计,是因为规格先可执行。Schwenk 也如实记下两次翻车:一个通过全部测试却悄悄丢掉报错的「捷径」,和一个只在优化构建下出现的内存 bug,说明规范再硬也替代不了人工审查。放进更大的图景,GitHub Octoverse 2026 统计超 40% 的 PR 已由智能体起草(此前写过),tsrs 把这条线推进到了编译器这样的基础设施核心。对普通团队,账要按自己的基线算:还在 7.0 附近,收益接近官方数字;已上 7.1 beta,先按 2.7 倍设预期;语言服务器补齐之前,放 CI 当加速步骤比当编辑器后端更稳。