The Cloudflare Blog

Introducing tsrs: a Port of TypeScript to Rust

8.5内容质量

TL;DR · AI 摘要

Cloudflare推出tsrs,将TypeScript移植到Rust,性能提升8倍,内存减少70%。

核心要点

  • tsrs使TypeScript性能提升8倍,内存使用减少70%。
  • 与TypeScript团队合作确保语言一致性,不进行分叉。
  • AI模型使Rust端口可在数天内完成。

结构提纲

按章节快速跳转。

  1. 介绍tsrs项目由Cloudflare与VoidZero合作开发。

  2. tsrs相比TypeScript 7.0快8倍,内存减少70%。

  3. 与TypeScript团队紧密合作,确保语言实现一致性。

  4. 需严格遵循TypeScript原生实现以避免兼容性问题。

  5. 通过npm安装tsrs包可尝试实验性版本。

  6. AI模型加速端口过程,推动更高效TypeScript实现。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • tsrs项目
    • 性能改进
      • 8倍速度提升
      • 70%内存减少
    • 合作机制
      • TypeScript团队协作
      • Oxc工具链集成
    • 技术挑战
      • 语言一致性保障
      • AI模型加速开发

金句 / Highlights

值得收藏与分享的关键句。

#TypeScript#Rust#性能优化#开源#Cloudflare
打开原文

介绍 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 包来尝试实验性发布版本:

code
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

电子邮件订阅