产品#代码生成#代码智能体#跑分

Cloudflare 联合 VoidZero 发布 tsrs:AI 智能体数周写完 TypeScript 编译器的 Rust 移植

Cloudflare 与 VoidZero 发布 tsrs:TypeScript 编译器的 Rust 移植,官方称类型检查最快 8 倍,独立复现 5.3 倍。

Cloudflare 博客的 tsrs 发布横幅:白底上排着「Introducing tsrs」标题,等距插画里 tsrs 芯片连接 TS 与 Rust 模块

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.25.3 倍省 72%
ImportStatic(2026-10-21)TypeScript 7.1.0-beta2.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 当加速步骤比当编辑器后端更稳。