Cloudflare 与 VoidZero 联合推出 tsrs:由 AI 生成的 TypeScript 编译器 Rust 移植版
tsrs 是 TypeScript 编译器的 Rust 移植版,由 Cloudflare 宣布推出,并与 VoidZero 及 Owner.com 的 Max Schwenk 共同开发。该项目在 Oxc 工具链中孵化,并与 TypeScript 团队密切合作。Cloudflare 强调,tsrs 并非 TypeScri
tsrs 是 TypeScript 编译器的 Rust 移植版本,由
Cloudflare 宣布推出,合作方包括 VoidZero 和来自 Owner.com 的 Max Schwenk。这个项目在 Oxc 工具链中孵化,开发过程中与 TypeScript 团队保持了紧密协作。Cloudflare 特别说明,tsrs 不是 TypeScript 的分支,语言设计仍旧完全由 TypeScript 团队说了算。
Cloudflare 给出的数据是:在类型检查工作线程数相同的前提下,tsrs 的类型检查速度最高提升 8 倍,内存占用则减少约 70%。Rust 还带来一个额外好处——项目可以通过 @tsrs/wasm 编译成 WebAssembly,在浏览器或 Workers 上跑检查,不必像 Go 二进制文件那样把垃圾回收器一起塞进最终产物。
开发者想试的话,指定现有的 tsconfig 就行:
npm install -D tsrs
npx tsrs -p . --noEmit
Schwenk 在一篇技术长文里讲了自己的做法:他没写一行代码,而是指挥以 Claude Opus 5.5 为核心的 Agent,完成了忠实于原版的移植。整个移植过程拿 TypeScript 自身的 15,197 个一致性测试用例当规范。在 Owner 那个 37,000 个文件的单体代码库里,原本用 TypeScript 7.0 做检查要 19 GiB 内存、耗时 80 秒,现在 7 秒就搞定。
有开发者对两个 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,让它变得更精简。
Peter Steinberger 在 X 上写道:
我在周末迁移到了 tsrs。可以直接替换,OC 的运行速度提升了约 5 倍。
一个 Agent 放手跑几周,拿到的版本反而明显更胜一筹;微软那边却是一个团队耗了两年、用 Go 把 TypeScript 编译器重写了一遍,两相对照,实在有点难以想象。
也有人态度谨慎,质疑基于 Arena 分配、内存永不释放的模型是否站得住脚。
tsrs 与微软基于 Go 开发的编译器 tsgo,以及 Theo Browne 开发的另一个 Rust 移植项目tsc-rs并存。Cloudflare 并不想让这些项目彼此竞争,而是把 tsc-rs 与 tsrs 合并成一个统一的软件包,还打算加入语言服务器和内容映射器支持。
眼下 tsrs 还在实验阶段。watch 模式和语言服务器都还不支持,--init 与 --showConfig也无法使用,诊断信息的顺序可能和原版不一样。更多细节可以看兼容性说明。
因为 tsrs 跟踪的是 TypeScript 7,还在用 TypeScript 5 或 6 的团队得先迁到微软的原生 Go 移植版,再换成 tsrs。前一步做完之后,迁到 tsrs 只需要继续用现有的 tsconfig。
tsrs 采用 Apache-2.0 开源许可证,目前已在 GitHub 上发布。