Cloudflare联合VoidZero推出Rust版tsrs编译器
Cloudflare宣布与VoidZero及Owner.com的Max Schwenk共同推出tsrs,这是TypeScript编译器的Rust移植版本。项目源自Oxc工具链,并与TypeScript团队保持合作,但并非TypeScript分支,语言规范和设计仍由TypeScript团队维护。
在相同类型检查工作线程数量下,Cloudflare称tsrs最高可实现8倍速度提升,内存占用约降低70%。得益于Rust实现,项目还可通过@tsrs/wasm编译为WebAssembly,在浏览器或Workers中执行检查,无需像Go程序那样将垃圾回收器一同打包。开发者可以沿用现有配置,运行“npm install -D tsrs”及“npx tsrs -p . --noEmit”进行尝试。
Max Schwenk在技术文章中表示,自己没有直接编写代码,而是通过指挥以Claude Opus 5.5为核心的Agent完成移植。开发过程以TypeScript官方的15,197项一致性测试作为规范。在Owner.com一个包含约37,000个文件的单体代码库中,原先TypeScript 7.0需要19 GiB内存、80秒完成检查,tsrs则将耗时缩短至7秒。
一项针对两个npm包的测试显示,tsrs速度提升5.3倍、内存减少72%,诊断结果完全一致,生成代码也逐字节相同。不过,tsrs遇到类型错误时返回退出码2,而tsc返回1,可能导致既有CI脚本失效。以TypeScript 7.1 beta为基准时,ImportStatic测得的性能优势降至2.7倍,因此8倍数据主要是相对较旧的7.0版本得出。TypeScript团队成员Daniel Rosenwasser也指出,性能改善并非单纯来自语言差异,tsrs中的部分优化已经被用于精简TypeScript 7.1。Peter Steinberger称,自己迁移后运行速度提升约5倍。
目前也有开发者质疑Arena分配且长期不释放内存的设计是否适合长期使用。tsrs将与微软基于Go的tsgo,以及Theo Browne开发的Rust项目tsc-rs并存;相关方面计划把tsc-rs与tsrs整合为统一软件包,并进一步加入语言服务器和内容映射器支持。
tsrs现阶段仍属实验项目,暂不支持watch模式和语言服务器,--init与--showConfig参数也不可用,诊断信息顺序可能与原版不同。它面向TypeScript 7,仍使用TypeScript 5或6的团队应先迁移到微软的Go版本,再继续沿用原有tsconfig切换到tsrs。项目已在GitHub开源,采用Apache-2.0许可证。
本文基于公开渠道信息整理,内容可能存在不准确或遗漏之处,不代表本站立场,如内容涉及侵权或错误,请联系我们处理。
阅读原文