2025年3月11日,微软正式宣布TypeScript编译器将迎来一场前所未有的变革。从TypeScript 7开始,编译器将不再由TypeScript本身编写,而是全面转向Go。这一消息在开发者社区引发了极大的关注和讨论。
自2012年10月微软发布TypeScript以来,这门语言已经成为现代Web开发不可或缺的一部分。过去十年里,几乎所有从事Web界面开发的开发者都接触过TypeScript。
作为Web开发的核心技术之一,TypeScript一直以其静态类型特性和优秀的工具链深受开发者喜爱,但同时也饱受编译速度的诟病。
长期以来,TypeScript在提升代码可维护性和减少Bug方面表现出色,但其编译器的运行速度一直是一个短板。
现有的TypeScript编译器是用TypeScript编写的,这既是一个优势,也是一种局限。优势在于,它可以用自身进行编译,证明其可行性。但劣势是,它必须转换为JavaScript并运行在Node.js之上,这意味着它依赖JavaScript的即时编译(JIT)模式,导致性能相较于原生编译语言逊色不少。
在实际使用中,编译大型项目时,TypeScript编译器的缓慢表现尤为明显。例如,微软官方数据显示,Visual Studio Code(VS Code)项目的TypeScript编译时间大约需要78秒,而Playwright需要11秒,date-fns需要6.5秒。这样的编译效率,不仅影响开发体验,也严重拖累了CI/CD流程的执行速度。
微软决定重写TypeScript编译器,并最终选择Go作为新的实现语言。这一选择让许多开发者感到意外,因为Rust近年来在高性能编译器领域风头正盛,而C++作为传统编译器开发语言也具备深厚的积淀。那么,微软为何舍Rust取Go?
Rust的所有权系统虽然能带来更高的内存安全性,但对于TypeScript这样一个已有庞大代码基的编译器而言,迁移难度极大。相比之下,Go语言的垃圾回收机制(GC)让内存管理更加自动化,使得移植TypeScript代码更为简单。
C++虽然具备卓越的性能,但它的复杂性和维护成本极高,难以匹配TypeScript团队对于开发效率的要求。
C#是微软的亲儿子,但它需要.NET运行时支持,而微软希望TypeScript编译器能作为一个独立的可执行程序,不受额外依赖的限制。
Go之所以脱颖而出,主要归因于以下几点优势:
语法简洁,易于维护,便于迁移TypeScript现有代码;
自动内存管理,减少开发者手动管理内存的负担;
可生成静态二进制文件,无需额外运行时,提升运行效率;
强大的并发处理能力,适合高效编译任务。
这些特性使Go在性能、可维护性和迁移成本之间找到了最佳平衡点,因此微软最终决定采用Go来重写TypeScript编译器。
目前,微软已经推出了新的Go版TypeScript编译器的测试版本,并公布了一些令人震撼的性能数据。在新的Go编译器中,VS Code的TypeScript编译时间从78秒缩短至7.5秒,Playwright从11秒缩短至1秒,date-fns从6.5秒缩短至0.7秒。这样的提升幅度,几乎改变了TypeScript编译的体验。
更快的编译速度不仅意味着开发者在本地开发时能得到更快的反馈,还意味着在CI/CD过程中,项目的构建和测试时间大幅减少。这对于需要频繁部署和持续集成的项目而言,显然是一大利好。
短期来看,TypeScript生态不会发生剧烈变化。
微软表示,TypeScript 5.9仍将维持现状,而TypeScript 6.x版本会逐步引入Go编译器的兼容层,引入一些弃用(deprecated)功能,并为新的 Go 编译器做准备。
真正的Go版TypeScript编译器预计将在TypeScript 7.0正式推出,时间可能在2027年。
对开发者而言,主要的变化包括:
编译速度大幅提升,开发体验更流畅;
TypeScript语言服务器响应更快,提升IDE代码提示与分析能力;
未来TypeScript编译器不再依赖Node.js,可作为独立工具运行。
尽管新的Go版编译器承诺性能大幅提升,但它仍然面临一些不确定性。
TypeScript 未来将如何集成到其他应用和 Web 浏览器?过去,TypeScript 编译器本身是 JavaScript,因此可以轻松嵌入各种 JavaScript 运行时环境,如 Node.js 和浏览器端。
理论上,Go 版本的 TypeScript 编译器可以通过 WebAssembly(WASM)在浏览器中运行,因为 Go 本身支持 WASM,但 TypeScript 编译器能否高效运行在 WASM 之上,还有待观察。
此外,TypeScript 编译器的插件和扩展工具也需要进行适配。目前尚不清楚微软是否会在 TypeScript 7 之后保留一个基于 JavaScript 的编译器版本,还是会彻底转向 Go,实现完全切换。
作为前端开发的重要基石,TypeScript的未来不仅关乎Web领域,也影响着整个JavaScript生态的发展方向。TypeScript的这次重大升级,必将在未来几年影响整个前端开发行业。
微软放弃 TypeScript?!TypeScript 迎来史上最大升级!
谷歌史上最大收购!330亿美元拿下 Wiz,云安全迎来巨变
Roblox 开源 AI 3D 生成模型,游戏开发迎来智能化变革