TypeScript編譯器移植到本機程式碼,C#粉絲問為什麼用Go?

微軟TypeScript 團隊已經發布了 TypeScript 編譯器到本機程式碼的移植預覽版,它帶來了巨大的效能提升,包括一項新的語言服務,可以加快專案的編譯與載入速度,並在 Visual Studio Code(VS Code)中啟用新的 AI 功能。
該項移植由微軟首席技術研究員安德斯·海思伯格(Anders Hejlsberg)推動,他是 TypeScript 和 C# 的建立者。
他表示,TypeScript 無法擴充套件到最大的專案,客戶報告稱大型專案編譯時存在記憶體不足的情況。“我們已經達到了 JavaScript 所能發揮的極限。”他在一篇影片中說道。
JavaScript 提供了一個即時(JIT)編譯器,但是海思伯格表示它存在侷限性,包含 JIT 編譯的開銷、缺乏共享記憶體併發性,以及缺乏對結構內聯分配等最佳化的支援。
該專案代號由安德斯發起,名為 Corsa,是現有 TypeScript 編譯器程式碼的移植版。
由於這是一個移植版而非重寫版,海思伯格認為其行為將保持不變,即使在極端情況下也是如此,因此它將是一個“即插即用的替代品”。還將有一個新的程序中間層 API,能夠使其他語言能夠與編譯器對話。
這對開發者的影響是巨大的。
微軟本身就有一個大型的 TypeScript 專案,即 Visual Studio Code,大約有 150 萬行程式碼。海思伯格展示了新編譯器如何將編譯時間從1分鐘多一點縮短到 6 秒以內的。 
對於 VS Code 使用者來說還會有更多好處,因為波浪線錯誤和懸停幫助等功能依賴於在載入時解析整個專案,所以新的本機編譯器將大大加快專案載入速度,並將啟用新的 AI 功能,例如立即對 LLM(大語言模型)的輸出進行型別檢查。
該專案還有一個副作用,TypeScript 語言服務現在將基於語言服務協議 (LSP),這是開發現有服務時尚不存在的標準。這意味著與編譯器不同,新的語言服務將具有不同的行為,海思伯格表示,團隊正在研究重構等領域,以考慮應如何實現這一項。
Corsa 專案根據 Apache 2.0 許可證已經在 GitHub 上開源。
https://github.com/microsoft/typescript-go
在GitHub 上最先熱議的問題之一是為什麼使用 Go 而不是 C#,尤其是考慮到是安德斯·海思伯格的參與以及 C# 支援 AOT(預先)編譯的事實。
安德斯在演講中還表示,該專案六個月前啟動,花費了大量時間對“各種語言”進行原型設計。他表示,Go 被證明是最合適的語言,因為它“針對所有平臺優化了本機程式碼,對資料佈局有很好的控制,能夠擁有迴圈資料結構等等”,以及“使用垃圾收集器進行自動記憶體管理,並且具有很好的併發性。”
一些.NET開發者對此感到失望。“這聽起來像是對 C# 的不信任,因為 Anders 是 C# 的原創者,而他的團隊現在選擇不使用它,”其中一位開發者如此說道。
另一位開發者則表示“這樣的事情讓我羞於在 C# .NET 上建立我的職業生涯……如果他們不在旗艦產品中使用自己的工具,我對他們的工具就沒有信心。”
在接受採訪時,安德思表示,儘管 AOT 取得了進步,但“C# 是位元組碼優先的”,並非適用於所有平臺,“沒有經過十年的強化”並且“不是按照這種方式設計的”。 
另一個重要因素是 C# 高度面向物件,而 Go“是函式和資料結構”,這使得 TypeScript 編譯器埠更加流暢。
他說,Go 被當做選項,但它仍然具有垃圾收集功能的最低階語言。
許多人對微軟錯失提升 .NET 功能的機會感到失望,但也有人表示,“我真的很喜歡 TS 團隊決定使用 Go 而不是 C#……這表明他們有能力把社群的需求放在第一位。”其他人則認為 Rust 會是更好的選擇。
安德思堅稱,TS團隊使用 Go 的決定是由“特定的技術要求”所驅動的,“它不會削弱我們對 C# 和 .NET 的深入和持續投資。微軟的大多數服務和產品都嚴重依賴 C# 和 .NET。”他說,C# 非常適合“需要快速、可維護和可擴充套件開發的場景”。
微軟長期以來一直致力於語言多樣性,這也不是 .NET 開發者第一次抱怨這家公司的選擇。Windows 主要是 C/C++,這是 Windows Vista 早期開發過程中的失望之舉,桌面版本的 Office 也是另一個例子。
.NET 社群之外的人會很高興TS團隊基於技術原因做出了這個決定,這將是 TypeScript 多年來最大的進步,緩解了許多從事大型專案的團隊的一個大痛點。 
那麼,我們什麼時候才能獲得原生的 TypeScript?
海思伯格預計在 2025年底前將推出一個“功能齊全的替代命令列編譯器”。它將作為 TypeScript 7.0 的版本號釋出,現有的基於 JavaScript 的編譯器將繼續維護,並將成為 TypeScript 6.0。
這兩個專案將一直維護,直到 TypeScript 7 及更高版本“達到足夠的成熟度和採用率”為止。

作者:場長

相關閱讀:

相關文章