听说 TypeScript7.0 要用 Go 写?

大家好,我是煎鱼。

前段时间社区里掀起了一波大热潮,甚至在电梯间都偶有同事拍一拍我,说到听说 TypeScript7.0 要用 Go 重写了,真牛逼。你知道吗?

实则上是:TypeScript7.0 编译器和工具的原生移植至用 Go 编写,以此实现大幅改善编辑器启动,将大多数构建时间缩短 10 倍,并大幅减少内存使用量的目的。

消息本身是由 @Anders Hejlsberg 在A 10x Faster TypeScript[1]中放出来的消息,其头衔是:微软技术研究员,TypeScript 首席架构师。C#、Delphi 和 Turbo Pascal 的原创设计者。

TS 选型核心依据

在 microsoft/typescript-go[2] 项目中,官方发起了 《Why Go?[3]》。可以详细的看到选择的缘由:

以下为原文的部分总结。选取了一些我认为比较有用的。

部分选择依据

1、代码兼容性
  • Go 的代码模式与现有 TypeScript 代码库的编码范式(内存管理、数据突变、多态实现等)高度契合。

  • 规避完全重构风险,采用渐进式移植策略保留已有行为特征与关键优化。

2、内存管理架构
  • 精细化内存控制:

    • 支持对象级/字段级内存布局定制,无需全局关注内存管理细节。

    • AST 等长生命周期对象管理更方便。

  • GC 性能平衡策略:

    • 批量编译场景可完全规避 GC(进程结束后自动释放)。

    • 非批量场景通过预分配+逻辑 GC 触发点设计,将 GC 影响降至毫秒级。

    • 对比其他语言方案,代码复杂度降低 30%+ 的同时保持同等运行时效率。

3、工程实践
  • 代码可移植性:基于 Go 与 TS 的结构相似性,实现核心算法跨语言变更同步率 85%+

  • 编译工具链支持:Go 原生支持交叉编译,单二进制部署简化工具链复杂度

  • 并发模型适配:Goroutine 机制为未来分布式编译预留架构扩展空间

性能提升情况

TS 官方的本机实现已经能够加载许多流行的 TypeScript 项目,包括 TypeScript 编译器本身。

下面是在 GitHub 上不同大小的一些流行代码库上运行 tsc 的时间:

简单来讲:大幅提速,官方很兴奋。摩拳擦掌中。

Go 社区的快速响应

这次 TS 的大动作和在微软博客上宣发,在国内外都引发了一波热潮。

在 Go 社区中也有同学迅速展开了行动,@Jorropo 光速提交了一版逃逸分析的优化反馈和 issues[4]

@Jorropo 在尝试新的 TypeScript 编译器时,发现性能有问题。花费了 70s:

________________________________________________________
Executed in   70.51 secs    fish           external
   usr time  159.17 secs  543.00 micros  159.17 secs
   sys time    5.49 secs  249.00 micros    5.49 secs

基于其对自身机器的配置了解,160 ÷ 70 ≈ 2.3 计算得知多核利用率较低。

为此通过研究,得知最大的异常耗时在于:github.com/microsoft/typescript-go/internal/checker

github.com/microsoft/typescript-go/internal/checker

________________________________________________________
Executed in   44.97 secs    fish           external
   usr time   50.51 secs  413.00 micros   50.51 secs
   sys time    0.32 secs  142.00 micros    0.32 secs

随后,@thepudds(主要负责 Go 内的性能、模糊测试和 Go Module 等)光速提交了多个 CL 进行优化,提高了至少 5 倍的性能:

escape analysis    total package compile time

go1.24.1           47.109 sec         50.60 sec
cl-657179-ps3       8.095 sec         11.57 sec
parallel-wip        2.844 sec          6.28 sec

第一行是 Go 1.24,第二行时合了优化 CL 后的。第三个是 ‌ WIP 并行版本(也就是正在发布上线后的实际性能提高可能会更好)。

总结

这次对于 TypeScript 编译器和工具原生移植用 Go 来写,对于 Go 这一门编程语言来讲,是非常不错的。生态圈多了一名大将。也意味着用户群体受益的更多。

结合 Go 社区的反响来看,优化还是非常及时的,态度上也是比较积极支持。

较为尴尬的是,在微软宣发的博客内,一滑动评论区,一眼看到一个太刺激的评论:

(打脸自家编程语言?)

参考资料

[1]

A 10x Faster TypeScript: https://devblogs.microsoft.com/typescript/typescript-native-port/

[2]

microsoft/typescript-go: https://github.com/microsoft/typescript-go

[3]

Why Go?: https://github.com/microsoft/typescript-go/discussions/411

[4]

issues: https://github.com/golang/go/issues/72815

关注和加煎鱼微信,

一手消息和知识,拉你进技术交流群👇

你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路

日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!

原创不易 点赞支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值