TypeScript的编译器出了Rust移植版,同样配置下快8倍,内存少约七成

来源:互联网 时间:2026-10-22

Cloudflare在10月20日公布了一个叫tsrs的项目,把TypeScript编译器用Rust重写了一遍,参与方还有VoidZero和Owner.com的Max Schwenk。项目放在Oxc工具链里孵化,和TypeScript官方团队合作推进。早期基准显示,在类型检查worker数量相同的前提下,它比TypeScript7.0快最多8倍,内存占用少约70%。官方特意说明基准是在同一套配置下跑的,不是靠更大的机器型号拉出来的数字。

8倍是跟谁比的

这个8倍比的是TypeScript7.0,不是现在大多数人装的版本。TypeScript7.1的beta版本身已经比7.0快2.5倍,其中一部分优化就是从tsrs回推到上游的。

项目明确说不fork TypeScript,语言怎么设计还是由TypeScript团队决定。理由是Rust移植必须严格跟随原实现的语义,一旦自行决定语言行为,兼容性迟早散架。这条边界意味着tsrs能做什么不由Cloudflare单方面说了算,也意味着它不会变成一个带私有扩展的分支。想做语言层面的改动,还是只能走官方的提案流程。

为什么选Rust而不是Go

TypeScript团队自己已经用Go重写过一版,速度提升接近10倍。再选Rust,理由不在速度。Go编译到WebAssembly时要把垃圾回收器一起带进去,Rust没有这个问题,内存管理模型让Wasm模块和宿主的交互更直接,产物也更小,边缘节点上这点体积差是实打实的。Cloudflare Workers本来就长期支持Wasm,这条链是通的。

落到用处上,整条类型检查链可以跑在浏览器、容器或者嵌入式设备里,不依赖一台开发机,也不依赖预装好的Node环境。工具链跟着应用一起分发,这套用法才算真的成立。

现在装的是实验版本,npm install tsrs之后用npx tsrs就能跑。默认配置按机器类型自适应,内存用得更多,速度也更快,介意内存可以调回固定配置。功能上还缺一些,诊断信息的输出顺序就和上游不同,官方说会在稳定版之前把差异压到最小。和tsc-rs合并成一个包的工作也在做,合并后会覆盖语言服务协议和content mappers。实验版本不承诺接口稳定,装的时候建议固定版本号。

维护方式值得单独说。Vinext跟Next.js上游同步的做法是每天由代理审一遍变更、抓取diff、给可能受影响的点开issue,每晚拿Next.js的测试套件跑一遍兼容矩阵。Cloudflare说tsrs会照这个流程走,同时把性能改进回推给TypeScript的Go版本。它能跟上上游的概率比一般移植项目高,但眼下仍是实验版本,生产构建链不建议直接切过去。生产构建里还有缓存和增量编译,那部分行为要单独测,真要评估可以放到它发布稳定版之后。

相关文章

A5创业网 版权所有

返回顶部