Cloudflare 与 VoidZero 联合发布 tsrs:一个由 AI 生成的 Rust 版 TypeScript 编译器
Cloudflare 联合 VoidZero 与 Owner.com 工程师 Max Schwenk 推出 tsrs,这是 TypeScript 编译器的 Rust 移植版,官方称类型检查最快可提升 8 倍、内存占用减少约七成。更引人注目的是它的开发方式:Schwenk 没有手写代码,而是指挥 AI Agent 完成了整个移植。项目目前仍处于实验阶段,且有几处细节值得开发者提前注意。
发生了什么
tsrs 是 TypeScript 编译器的 Rust 重写版本,由 Cloudflare 宣布推出,与 VoidZero 及 Owner.com 的 Max Schwenk 共同开发。项目在 Oxc 工具链中孵化,并与 TypeScript 团队保持密切合作。Cloudflare 特别强调,tsrs 并不是 TypeScript 的分支,语言本身的演进方向仍完全由 TypeScript 团队决定。

使用方式与官方编译器 tsc 基本一致,指定现有的 tsconfig 即可:
npm install -D tsrs
npx tsrs -p . --noEmit
性能:宣称的 8 倍是怎么来的
Cloudflare 给出的数据是:在类型检查工作线程数量相同的情况下,tsrs 的检查速度最高可提升 8 倍,内存占用减少约 70%。
选用 Rust 还带来一个额外好处:项目可以通过 @tsrs/wasm 编译成 WebAssembly,从而在浏览器或 Cloudflare Workers 上直接运行类型检查。相比之下,用 Go 编译出的二进制文件会把垃圾回收器一并打包进产物,在浏览器这类环境中就不太方便。
在 Owner 一个拥有 37,000 个文件的单体代码库中,Schwenk 给出的对比是:原本用 TypeScript 7.0 检查需要 19 GiB 内存和 80 秒,换成 tsrs 后只需 7 秒。
没写一行代码的移植过程
在一篇技术长文中,Schwenk 解释了他的做法:他没有编写任何代码,而是指挥一个以 Claude Opus 5.5 为核心的 Agent 完成了忠实于原版的移植。整个过程的"规格说明"就是 TypeScript 自身的 15,197 个一致性测试用例——只要这些测试通过,移植就算达标。
这种"用自然语言指挥 Agent 完成大规模系统级迁移"的路径,也算是 AI 辅助编程(氛围编程)在编译器这类硬核项目上的一次极端样本。
第三方实测:提升明显,但有两个坑
一名开发者对两个 npm 包做了基准测试,测得 tsrs 检查速度提升 5.3 倍、内存占用减少 72%,诊断结果完全一致,生成的代码逐字节相同。不过他也发现了两个问题:
- 退出码不一致:存在类型错误时,tsrs 以退出码 2 结束,而
tsc返回 1。对依赖退出码判断成败的 CI 脚本来说,这个差异足以让流程悄悄跑偏。 - 基准版本影响结论:如果改用更新的 TypeScript 7.1 beta 而不是 7.0 作为基准,ImportStatic 测试中的性能提升会缩小到 2.7 倍。也就是说,Cloudflare 宣称的 8 倍是相对于较旧版本测得的,读者需要留意对比基线。
TypeScript 团队的 Daniel Rosenwasser 对此回应称,性能提升"并不只是语言选择的结果",而且 tsrs 中发现的一些优化已经被用于改进 TypeScript 7.1,使其更加精简。
社区反应两极。有开发者表示自己周末就迁移到了 tsrs,可以直接替换,运行速度提升约 5 倍,并感叹:微软用一整个团队、花两年时间用 Go 重写 TypeScript 编译器,而现在让一个 Agent 放手去做,几周内就能得到一个明显更好的版本。也有人持谨慎态度,质疑基于 Arena 分配、从不释放内存的模型(即一次性分配大块内存、运行期间不回收)是否合理。
与 tsgo、tsc-rs 的关系
目前市面上并存着几个方向相近的项目:微软基于 Go 开发的编译器 tsgo,以及 Theo Browne 开发的另一个 Rust 移植项目 tsc-rs。
Cloudflare 并不打算让它们互相竞争,而是已经把 tsc-rs 与 tsrs 合并为一个统一的软件包,并计划后续加入语言服务器和内容映射器(source map)支持。
现状与迁移建议
tsrs 仍处于实验阶段,已知限制包括:
- 尚不支持 watch 模式和语言服务器
--init与--showConfig不可用- 诊断信息的输出顺序可能与原版不同
由于 tsrs 跟踪的是 TypeScript 7,仍在使用 TypeScript 5 或 6 的团队应先迁移到微软的原生 Go 移植版,再替换为 tsrs。完成前一步之后,切换到 tsrs 基本上只需要继续使用现有的 tsconfig。
项目采用 Apache-2.0 开源许可证,已在 GitHub 上发布。
关键要点
- 定位:tsrs 是 TypeScript 编译器的 Rust 移植版,与 TypeScript 团队合作开发,不是分支,语言设计权仍在官方团队手中。
- 性能要看清基线:8 倍提速是相对 TypeScript 7.0 测得;用 7.1 beta 对比时,部分测试的提升缩窄到 2.7 倍。
- CI 需注意退出码:类型错误时 tsrs 返回 2,而
tsc返回 1,直接替换可能影响流水线判断。 - 迁移路径:项目尚不支持 watch 与语言服务器,使用 TS 5/6 的团队应先迁移到 TypeScript 7 生态,再尝试 tsrs。