聽說 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、內存管理架構
- 精細化內存控制:
- 支持對象級/字段級內存布局定制,無需全局關注內存管理細節。
- ST 等長生命周期對象管理更方便。
- 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