共计 1224 个字符,预计需要花费 4 分钟才能阅读完成。
TypeScript、C#、Delphi 语言之父 Anders Hejlsberg 今日在 Microsoft 开发者博客宣布重大消息:TypeScript 编译器以及工具链将移植到 Go 语言。
这一举动旨在解决 TypeScript 在大型代码库中性能瓶颈的问题,为开发者带来更流畅、更高效的开发体验。
在基准测试中,在一些大型的 TypeScript 项目中使用 tsc 进行编译能得到 10 倍左右的速度提升,更有一些其他项目能有 15 倍左右的提升。
根据官方公布的数据,新的原生实现将带来以下惊人的改进:
– 编辑器启动的项目加载速度提升 8 倍
– 大多数构建时间缩短 10 倍
– 内存使用量大幅减少
实测数据说话,性能提升肉眼可见!
代码库 | 代码行数 (LOC) | 当前版本耗时 (秒) | 原生版本耗时 (秒) | 性能提升 |
---|---|---|---|---|
VS Code | 1,505,000 | 77.8 | 7.5 | 10.4x |
Playwright | 356,000 | 11.1 | 1.1 | 10.1x |
TypeORM | 270,000 | 17.5 | 1.3 | 13.5x |
date-fns | 104,000 | 6.5 | 0.7 | 9.5x |
tRPC (server + client) | 18,000 | 5.5 | 0.6 | 9.1x |
rxjs (observable) | 2,100 | 1.1 | 0.1 | 11.0x |
为什么选择 Go 开发?
Anders Hejlsberg 和 TypeScript 团队在 GitHub 仓库的讨论区解释了为何采用 Go,主要原因有以下几点:
– 代码结构相似性:TypeScript 现有代码库采用函数式编程风格,很少使用类。而 Go 语言也以函数和数据结构为中心,与现有代码结构高度相似,这使得移植工作更加容易。
– 内存管理:Go 语言提供自动垃圾回收(GC),无需开发者手动管理内存,这大大简化了移植过程,降低了代码复杂度。同时,Go 的 GC 对 TypeScript 编译器这类批处理任务影响很小。
– 内存布局控制:Go 语言允许对内存布局和分配进行精细控制,这对于优化性能至关重要。
– 图处理能力:TypeScript 编译器涉及大量的树遍历和多态节点处理,Go 语言在这方面表现出色。
版本路线图
当前版本为 TypeScript 5.8,即将发布 TypeScript 5.9。
基于 JavaScript 的代码库将继续开发到 6.x 系列,TypeScript 6.0 将引入一些弃用和破坏性更改,为原生代码库做准备。
当原生代码库达到与当前 TypeScript 相当的功能时,将发布 TypeScript 7.0。
为了保持清晰,TypeScript 团队将分别称之为 TypeScript 6 (JS) 和 TypeScript 7 (native)。
TypeScript 6 (JS) 将持续维护,直到 TypeScript 7+ 达到足够的成熟度和采用率。
内部讨论或代码注释中可能会出现“Strada”(TypeScript 原始代号) 和“Corsa”(此次工作的代号)。
TypeScript 团队预计在 2025 年中期发布一个能够进行命令行类型检查的原生 tsc 实现,并在年底发布一个功能完整的项目构建和语言服务解决方案。