tsrs是什么:Cloudflare联合VoidZero打造的TS编译器Rust移植版

Cloudflare对外发布了名为tsrs的项目,它是TypeScript编译器的Rust语言重实现版本,由Cloudflare、VoidZero以及Owner.com的Max Schwenk三方合作完成。该工作在Oxc工具链中孵化,并与TypeScript团队保持紧密协作。Cloudflare特别指出,tsrs不能算作TypeScript的一个分支:关于语言本身的规则设计权,依然完全掌握在TypeScript团队手中。

从定位上看,tsrs面向的读者包括负责前端架构的技术负责人、参与TypeScript工具链研发的工程师,以及需要管理大规模单体仓库工程效能的一线团队。

性能账本:类型检查快8倍、内存降七成,还能编译成WASM

按Cloudflare给出的说法,当类型检查所使用的工作线程数量保持一致时,tsrs的最快速度可达到原版的8倍左右,同时内存消耗下降约70%。Rust带来的另一项收益是可以通过@tsrs/wasm编译为WebAssembly,从而把类型检查搬进浏览器或Workers环境执行;相较之下,Go语言构建的独立二进制文件会把垃圾回收器一并打包进产物,而Rust方案没有这类开销。

上手方式很直接,沿用已有的tsconfig即可尝试。安装依赖并执行检查的两条命令分别是:

npm install -D tsrs

npx tsrs -p . --noEmit

移植全由AI驱动:Claude Opus 5.5驾驭15,197个一致性测试用例

在另一篇技术长文中,Schwenk说明自己并未亲手编写代码,整个移植工作由他以Claude Opus 5.5为核心的Agent来指挥推进,产出的版本与原版保持高度一致。衡量移植可信度的标尺是TypeScript官方的15,197个一致性测试用例。

他给出一个真实案例:Owner内部拥有37,000个文件的单体代码库,原本使用TypeScript 7.0完成一次检查需要19 GiB内存并耗时80秒,换用tsrs之后时间缩短到7秒。

也有开发者对这两个npm包做了独立基准测试:实测tsrs的检查耗时改进为5.3倍,内存占用减少72%,且输出的诊断信息与原版完全吻合,生成的代码也做到了逐字节相同。但他同时发现在存在类型错误时,tsrs以退出码2退出,而tsc给出的是1,这个差别容易在不知不觉中令CI脚本失效。另外,若把基准换成更新的TypeScript 7.1 beta而非7.0,ImportStatic这个测试项显示出的提速幅度会收窄到2.7倍。这也说明Cloudflare所宣传的8倍提升是相对于版本更早的实现得到的。

AI几周造出Rust版TypeScript编译器:检查提速8倍、内存省70%

对于性能数据,TypeScript团队的Daniel Rosenwasser回应认为,这些改进“并不只是语言选择的结果”,而且tsrs里发掘出的一些优化已经被用来改进TypeScript 7.1,后者因此变得更加精简。

Peter Steinberger则在X上分享体验:

“我在周末迁移到了tsrs。可以直接替换,OC的运行速度提升了约5倍。”

他进一步感叹:

“有点不可思议,微软花了一个团队两年时间用Go重写TypeScript编译器,而现在只需让一个Agent放手去做,几周内就能得到一个明显更好的版本。”

不过,也有声音保持谨慎,对采用Arena分配内存、始终不回收释放的模型是否符合常理提出疑问。

与tsgo、tsc-rs并存:定位分工与迁移路径

在生态位置上,tsrs与微软用Go语言重写的编译器tsgo、以及Theo Browne所开发的另一个Rust移植项目tsc-rs同时存在。Cloudflare表示无意促成这些项目互相竞争,而是已经把tsc-rs与tsrs整合进同一个统一的软件包内,后续计划补充语言服务器(language server)以及内容映射器(content mapper)方面的能力。

需要注意的是,tsrs目前仍处在实验阶段:watch模式与语言服务器均未支持,--init和--showConfig也暂不可用,诊断输出顺序可能和原版有所出入,更多细节可以查阅项目的兼容性说明文档。

由于tsrs跟踪的是TypeScript 7,仍维持在TypeScript 5或6版本的团队应当先把代码基础迁移到微软官方的Go原生移植版,然后才替换成tsrs。走到那一步之后,切换到tsrs所需的操作就只是继续复用原有的tsconfig。许可方面,tsrs以Apache-2.0协议开源,代码已发布在GitHub上。

小结:tsrs以Rust重构TypeScript编译流程,在评测中带来约5.3至8倍的检查提速和七成上下的内存节省,并打开WASM运行通道;AI Agent驱动开发、15,197个一致性测试覆盖,使其具备可信的落地基础。不过退出码差异与功能缺口提示团队在生产接入前应做好CI与版本路径的评估。