Introducing tsrs: a Port of TypeScript to Rust
TL;DR · AI 摘要
Cloudflare推出tsrs,将TypeScript移植到Rust,性能提升8倍,内存减少70%。
核心要点
- tsrs使TypeScript性能提升8倍,内存使用减少70%。
- 与TypeScript团队合作确保语言一致性,不进行分叉。
- AI模型使Rust端口可在数天内完成。
结构提纲
按章节快速跳转。
- §项目背景
介绍tsrs项目由Cloudflare与VoidZero合作开发。
- ·性能改进
tsrs相比TypeScript 7.0快8倍,内存减少70%。
- ›合作机制
与TypeScript团队紧密合作,确保语言实现一致性。
- ·技术挑战
需严格遵循TypeScript原生实现以避免兼容性问题。
- ›使用方法
通过npm安装tsrs包可尝试实验性版本。
- ·未来展望
AI模型加速端口过程,推动更高效TypeScript实现。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- tsrs项目
- 性能改进
- 8倍速度提升
- 70%内存减少
- 合作机制
- TypeScript团队协作
- Oxc工具链集成
- 技术挑战
- 语言一致性保障
- AI模型加速开发
金句 / Highlights
值得收藏与分享的关键句。
tsrs是TypeScript的Rust端口,性能提升8倍,内存减少70%。
与TypeScript团队合作确保语言一致性,不进行分叉。
AI模型使大规模端口在数天内完成,推动Rust端口发展。
介绍 tsrs:将 TypeScript 移植到 Rust | Cloudflare 博客
post
开发者平台
JavaScript
开源
2026 年 10 月 20 日
介绍 tsrs:将 TypeScript 移植到 Rust
Boshen Chen、Dimitri Mitropoulos 和 Christoph Nakazawa
6 分钟阅读
复制链接
Cloudflare 和 VoidZero 现在正在与 Owner.com 的 Max Schwenk 合作开发 tsrs,这是一个 TypeScript 编译器的 Rust 移植版本。我们与 TypeScript 团队紧密合作,并将 tsrs 作为 Oxc JavaScript 编译器工具链的一部分进行孵化。
我们的目标是帮助开发者减少等待代码检查的时间,从而有更多时间进行开发。让 TypeScript 更快、更节省内存,也有助于将完整的开发环境带到更多地方,包括你的浏览器中。
需要明确的是,我们并不是要分叉 TypeScript。我们认为 TypeScript 团队应该对语言的设计和方向保持完全的控制权。他们一直保持着长期的愿景,并在 JavaScript 社区中引导 TypeScript 的采用。我们不希望改变这一点。
TypeScript 团队在许多方面可以快速推进,但对于某些功能,他们可能会花费数年时间有意探索选项并制作原型,然后再选择正确的实现方式。Rust 移植版本必须紧密遵循这些决策,否则最终会变得不兼容。我们必须严格基于原始实现来保持 TypeScript 语言的完整性——TypeScript 团队应独自负责决定其具体表现形式。
性能和内存改进
我们对 TypeScript 的 Rust 移植版本的初步基准测试结果令人鼓舞:在使用相同数量的类型检查工作线程时,tsrs 的速度比 TypeScript 7.0 快达 8 倍,内存使用量减少了约 70%:
如你所见,TypeScript 的下一个版本已经带来了许多性能改进,使 TypeScript 7.1 beta 的速度比 TypeScript 7.0 快达 2.5 倍。其中一些优化是从 tsrs 上游引入的,我们希望未来能发现更多。
你可能已经看到过最近对不同 TypeScript 移植版本的基准测试,这些测试经常声称性能有显著提升,这通常是因为使用了比 TypeScript 默认设置更大的机器类型和不同选项。我们与 TypeScript 团队合作,确保上述基准测试是在相同配置下进行比较的。
默认情况下,tsrs 带有一个自适应配置,该配置根据机器类型进行调整,使用更多内存但速度更快:
尝试 tsrs
Rust 中的 TypeScript 目标是忠实移植 TypeScript。你可以通过从 npm 安装 tsrs 包来尝试实验性发布版本:
npm install tsrs
npx tsrs为什么现在?
多年来我们看到过许多将 TypeScript 移植到其他语言的尝试。由于涉及的复杂性,只有一次移植成功:TypeScript 团队将 TypeScript 从 JavaScript 移植到 Go。
然而,前沿的 AI 模型现在可以在几天内几乎独立地完成大规模移植。我们现在已经看到 Rust 或 C++ 中的 slopforks、忠实移植和完全重新架构的 TypeScript 版本。显然,市场对更快的 TypeScript 有明确需求。
为什么选择 Rust?
你可能会想:“TypeScript 的 Go 移植版本已经让 TypeScript 比之前用 TypeScript 编写的版本快了 10 倍,并且内存效率高得多。为什么这还不够?”
然而,这不仅仅是关于速度的问题。Rust 提供了一些独特的优势:在 WebAssembly 中运行。Rust + Wasm 的故事一直很强,其中一个原因源于 Rust 语言设计的基本原理。当你将 Go 程序编译为 Wasm 时,必须同时编译 Go 的垃圾回收器。但 Rust 的内存管理模型使得 WebAssembly 客户端和主机之间能够进行直接的内存交互。这是使 Rust 成为 WebAssembly 用例更优选择的关键因素之一:内存效率更高。
Cloudflare Workers 一直支持 Wasm。就在几周前,我们宣布通过新的 Emscripten 目标为 wasm-bindgen 支持原生 Rust。当你在 Workers 上以紧密循环的方式运行整个软件构建和部署系统时,较小的内存占用会迅速带来显著优势。这意味着你可以如此高效地运行这些工作负载,现在甚至可以在以前无法运行的环境中运行完全封装的开发系统。
当与代理结合使用时,这开启了新的可能性:你现在可以在 Cloudflare 上的完全沙箱环境中端到端地运行开发工具链。但借助 Wasm,你还可以在浏览器中、嵌入式设备上或物联网应用中安全地运行这些环境。
tsrs 的移植将如何维护?
首先,我们正在与 Theo Browne 合作,将 tsc-rs 和 tsrs 合并为一个支持 TypeScript 所有功能的单一包,包括语言服务器协议(LSP)和内容映射器。其次,我们通过与上游 Next.js 保持 Vinext 同步的方式取得了显著成效。我们在最近的博客文章中解释了具体做法:
每天早上,代理会审查更改、获取差异,并为任何可能影响 Vinext 的内容创建跟踪问题。每个晚上,我们运行 Next.js 测试套件针对 Vinext 重新生成兼容性矩阵。当这些测试或问题发现差距时,代理现在可以识别两个代码库中的更改,构建复现案例,移植相关测试,并提出修复方案。
我们将对 TypeScript 采用相同流程,特别注意不要引入与上游 TypeScript 不同的行为。当我们发现性能改进时,会尝试将其贡献回 TypeScript Go 代码库,使所有人都受益。
最后,我们认识到目前与上游 TypeScript 版本存在一些差异,例如诊断信息的输出顺序。我们计划在发布稳定版本时将这些差异降至最低。
未来展望?
Cloudflare 已经是许多免费且开源的 Rust 工具的家园,这些工具为 JavaScript 生态系统提供支持,例如 Vite、Rolldown、Oxlint 和 Oxfmt。随着超过 1000 万开发者在 Cloudflare 上构建应用,我们非常重视让底层开发工具链更快、更便携,并更容易在更多地方运行。我们很兴奋能尝试将 tsrs 更深入地集成到我们的技术栈中,例如在 Oxlint 中实现类型感知的 lint 规则。
与 Vinext 一样,我们的目标是将 tsrs 作为一个维护良好、健康的开源项目来运行——同时不干扰 TypeScript 本身的开发。Oxc 团队已经开始重构代码库,以提升性能、减少内存占用并提高可维护性。我们知道 TypeScript 团队对此高度重视——他们正在针对 tsc 进行内存和性能优化的实验。我们很期待与 TypeScript 团队和 JavaScript 社区合作,共同打造最优质且最快的 TypeScript 实现。
目录列
讨论列
相关标签及社交媒体链接
相关标签
关注社交媒体
- Cloudflare
电子邮件订阅