自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聽說 TypeScript7.0 要用 Go 寫?

開發(fā) 前端
TypeScript7.0 編譯器和工具的原生移植至用 Go 編寫,以此實(shí)現(xiàn)大幅改善編輯器啟動,將大多數(shù)構(gòu)建時間縮短 10 倍,并大幅減少內(nèi)存使用量的目的。

大家好,我是煎魚。

前段時間社區(qū)里掀起了一波大熱潮,甚至在電梯間都偶有同事拍一拍我,說到聽說 TypeScript7.0 要用 Go 重寫了,真牛逼。你知道嗎?

實(shí)則上是:TypeScript7.0 編譯器和工具的原生移植至用 Go 編寫,以此實(shí)現(xiàn)大幅改善編輯器啟動,將大多數(shù)構(gòu)建時間縮短 10 倍,并大幅減少內(nèi)存使用量的目的。

圖片圖片

消息本身是由 @Anders Hejlsberg 在A 10x Faster TypeScript[1]中放出來的消息,其頭銜是:微軟技術(shù)研究員,TypeScript 首席架構(gòu)師。C#、Delphi 和 Turbo Pascal 的原創(chuàng)設(shè)計(jì)者。

TS 選型核心依據(jù)

在 microsoft/typescript-go[2] 項(xiàng)目中,官方發(fā)起了 《Why Go?[3]》??梢栽敿?xì)的看到選擇的緣由:

圖片圖片

以下為原文的部分總結(jié)。選取了一些我認(rèn)為比較有用的。

部分選擇依據(jù)

1、代碼兼容性

  • Go 的代碼模式與現(xiàn)有 TypeScript 代碼庫的編碼范式(內(nèi)存管理、數(shù)據(jù)突變、多態(tài)實(shí)現(xiàn)等)高度契合。
  • 規(guī)避完全重構(gòu)風(fēng)險,采用漸進(jìn)式移植策略保留已有行為特征與關(guān)鍵優(yōu)化。

2、內(nèi)存管理架構(gòu)

  • 精細(xì)化內(nèi)存控制:
  • 支持對象級/字段級內(nèi)存布局定制,無需全局關(guān)注內(nèi)存管理細(xì)節(jié)。
  • ST 等長生命周期對象管理更方便。
  • GC 性能平衡策略:
  • 批量編譯場景可完全規(guī)避 GC(進(jìn)程結(jié)束后自動釋放)。
  • 非批量場景通過預(yù)分配+邏輯 GC 觸發(fā)點(diǎn)設(shè)計(jì),將 GC 影響降至毫秒級。
  • 對比其他語言方案,代碼復(fù)雜度降低 30%+ 的同時保持同等運(yùn)行時效率。

3、工程實(shí)踐

  • 代碼可移植性:基于 Go 與 TS 的結(jié)構(gòu)相似性,實(shí)現(xiàn)核心算法跨語言變更同步率 85%+
  • 編譯工具鏈支持:Go 原生支持交叉編譯,單二進(jìn)制部署簡化工具鏈復(fù)雜度
  • 并發(fā)模型適配:Goroutine 機(jī)制為未來分布式編譯預(yù)留架構(gòu)擴(kuò)展空間

性能提升情況

TS 官方的本機(jī)實(shí)現(xiàn)已經(jīng)能夠加載許多流行的 TypeScript 項(xiàng)目,包括 TypeScript 編譯器本身。

下面是在 GitHub 上不同大小的一些流行代碼庫上運(yùn)行 tsc 的時間:

圖片圖片

簡單來講:大幅提速,官方很興奮。摩拳擦掌中。

Go 社區(qū)的快速響應(yīng)

這次 TS 的大動作和在微軟博客上宣發(fā),在國內(nèi)外都引發(fā)了一波熱潮。

在 Go 社區(qū)中也有同學(xué)迅速展開了行動,@Jorropo 光速提交了一版逃逸分析的優(yōu)化反饋和 issues[4]:

圖片圖片

@Jorropo 在嘗試新的 TypeScript 編譯器時,發(fā)現(xiàn)性能有問題?;ㄙM(fèi)了 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

基于其對自身機(jī)器的配置了解,160 ÷ 70 ≈ 2.3 計(jì)算得知多核利用率較低。

為此通過研究,得知最大的異常耗時在于: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(主要負(fù)責(zé) Go 內(nèi)的性能、模糊測試和 Go Module 等)光速提交了多個 CL 進(jìn)行優(yōu)化,提高了至少 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,第二行時合了優(yōu)化 CL 后的。第三個是 WIP 并行版本(也就是正在發(fā)布上線后的實(shí)際性能提高可能會更好)。

總結(jié)

這次對于 TypeScript 編譯器和工具原生移植用 Go 來寫,對于 Go 這一門編程語言來講,是非常不錯的。生態(tài)圈多了一名大將。也意味著用戶群體受益的更多。

結(jié)合 Go 社區(qū)的反響來看,優(yōu)化還是非常及時的,態(tài)度上也是比較積極支持。

較為尷尬的是,在微軟宣發(fā)的博客內(nèi),一滑動評論區(qū),一眼看到一個太刺激的評論:

圖片圖片

參考資料

[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

責(zé)任編輯:武曉燕 來源: 腦子進(jìn)煎魚了
相關(guān)推薦

2017-01-16 13:26:39

2017寫前端

2020-04-07 16:12:56

Go編程語言開發(fā)

2016-01-12 16:58:31

C游戲

2021-10-18 21:41:10

Go程序員 Defer

2021-02-09 20:51:13

D 語言腳本編程語言

2018-10-11 10:41:12

Go 開發(fā)技術(shù)

2020-09-11 06:46:00

TypeScriptJavaScala

2020-12-15 16:44:48

代碼程序運(yùn)行

2020-08-27 14:05:32

TypeScript配置文件前端

2018-09-28 07:00:03

編程語言Go語言

2023-02-15 08:17:20

VSCodeTypeScrip

2021-02-20 23:33:34

TypeScript代碼開發(fā)

2023-04-26 08:43:28

GoCGO語言

2020-03-06 10:25:10

注解Java代碼

2012-03-20 09:20:40

Go語言

2021-08-13 11:45:00

Go語言字節(jié)

2023-09-07 07:53:21

JavaScriptGoRust

2023-02-03 16:03:17

TypescriptJavaScript

2013-12-12 10:55:21

2021-09-08 08:34:37

Go 文檔Goland
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號