
TypeScript 移植到 Rust:快 8 倍、内存少 70%,还能跑进浏览器
Cloudflare 联合 VoidZero 与 Max Schwenk 推出 TypeScript 编译器 Rust 移植版 tsrs,在 Oxc 工具链孵化:同配置下比 TypeScript 7.0 快 8 倍、内存少 70%。不是 fork,靠 Rust+Wasm 还能把完整开发环境跑进浏览器。
相关标签
TypeScript 移植到 Rust:快 8 倍、内存少 70%,还能跑进浏览器
TypeScript 编译器有了 Rust 移植版——Cloudflare、VoidZero 和 Owner.com 的 Max Schwenk 正在合作开发 tsrs,并把它放进 Oxc JavaScript 编译器工具链里孵化。早期基准很能打:同配置下比 TypeScript 7.0 快 8 倍、内存少 70%。
不是 fork,是”忠实移植”
先说清楚这事的边界。tsrs 不是 fork——Cloudflare 明确表态:「我们相信 TypeScript 团队应保持对语言设计和方向的完全控制,不希望改变这一点。」
理由是:Rust 移植必须严格跟随原实现的语义,一旦自行决定语言行为,兼容性迟早散架。TypeScript 团队对某些特性可能花几年探索原型才定方案,移植版跟不上,就会烂掉。想做语言层面的改动,还是只能走官方提案流程。
性能数字值得细看
- tsrs 早期基准:比 TypeScript 7.0 快最多 8 倍、内存占用少约 70%(在类型检查 worker 数量相同的前提下);
- Cloudflare 强调基准是与 TypeScript 团队一起核对过的同配置对比——市面上已出现一些”性能很猛”的移植版宣传,很多是用了更大的机器类型和不同选项;
- 另外别忘了:TypeScript 7.1 beta 本身已比 7.0 快 2.5 倍,其中一部分优化就是从 tsrs 上游回馈的;
- tsrs 默认采用按机器类型自适应的配置,内存用得更多、速度更快,介意内存可以调回固定配置。
「Go 版已经快 10 倍了,为什么还要 Rust?」
Cloudflare 自己回答了这个问题:关键是 Wasm。
TypeScript 团队已经用 Go 重写过编译器(TypeScript 7),速度提升约 10 倍。但 Go 程序编译到 WebAssembly 时,得连 Go 的垃圾回收器一起带上;而 Rust 的内存管理模型让 Wasm guest 和 host 之间的交互很直接,没有 GC 负担,产物也更小。
Cloudflare Workers 早就支持 Wasm,几周前还宣布了原生 Rust 支持(Emscripten target 的 wasm-bindgen)。这让一件以前不现实的事变得可能:在浏览器里、嵌入式设备上、IoT 应用里,跑一个完整的开发环境——整条类型检查链不依赖开发机,也不依赖预装好的 Node 环境,工具链跟着应用一起分发。结合 AI Agent,还能在 Cloudflare 的沙箱里端到端跑完整的开发工具链。
为什么是现在
多年来把 TypeScript 移植到其他语言的尝试不少,但成功的只有一个:官方的 Go 移植。Cloudflare 指出,前沿 AI 模型如今已经能”在几天内几乎独立完成大规模移植”——近期的 slopfork(低质分叉)、忠实移植、彻底重构版层出不穷,说明对”更快的 TypeScript”的需求是真实存在的。
怎么用、怎么维护
- 实验版本已上 npm:
npm install tsrs后npx tsrs即可运行;实验版不承诺接口稳定,安装时建议固定版本号; - 功能尚有缺口,例如诊断信息输出顺序与上游不同,官方会在稳定版之前把差异压到最小;
- 与 Theo Browne 的 tsc-rs 合并成一个包的工作也在推进,合并后将覆盖语言服务协议(LSP)和 content mappers;
- 维护方式沿用 Cloudflare 做 Vinext 的套路:Agent 每日评审上游变更、每夜跑测试套件,并会尝试把性能优化回馈到 TypeScript 的 Go 代码库。
参考资料 / 来源
更多资讯
想看更多优质内容?
浏览所有资讯