TypeScript Go 實現的突破性改進與構建工具的語言演變

作者: Calpa Liu
字數:1902
出版日期:2025年3月15日

TypeScript最近宣佈的Go語言原生實現(被稱為TSGo或Corsa)標誌著這一流行編程語言發展歷程中的重要里程碑。這項於2025年3月11日公布的重大技術轉變,不僅展示了引人矚目的性能提升,還反映了更廣泛的JavaScript生態系統中正在發生的構建工具轉向Rust和Go等編譯型語言的趨勢。本報告將深入探討TypeScript Go實現的改進、社區反應以及為何許多JavaScript開發者正轉向使用Rust和Go構建開發工具。

TypeScript Go 實現的性能突破

TypeScript 團隊決定將TypeScript編譯器和相關工具從JavaScript重新實現為Go語言的主要動機是為了解決性能問題。現有的TypeScript編譯器(tsc)是用TypeScript/JavaScript編寫的,運行在Node.js上,這意味著其性能受限於JavaScript的執行環境約束。對於大型代碼庫而言,這種限制尤為明顯,開發者經常面臨長時間的加載和類型檢查等問題。

Go語言的原生實現帶來了令人印象深刻的性能提升。根據Microsoft發布的基準測試數據,新的Go實現可以使構建時間提高約10倍,同時顯著減少內存使用量。具體的性能改進數據令人驚嘆:

對於VS Code這樣的大型項目(約150萬行代碼),原有的TypeScript編譯器需要77.8秒完成構建,而Go實現僅需7.5秒,性能提升了10.4倍。其他項目的性能改進同樣顯著,例如Playwright(提升10.1倍)、TypeORM(提升13.5倍)和date-fns(提升9.5倍)。這種性能提升對大型企業項目具有重大意義,可以顯著提高開發效率。

除了構建性能的提升外,Go實現還帶來了編輯器體驗的顯著改進。微軟承諾,使用Visual Studio Code的開發者將能夠體驗到項目加載時間提高8倍,即時獲得全面的錯誤列表,並享受所有語言服務操作(包括代碼補全、快速信息查看、定義跳轉和引用查找)的更高響應速度。這些改進將使開發者能夠更加專注於創造性的編程工作,而不是等待工具響應。

社區對 TypeScript Go 實現的反應

TypeScript Go實現的宣佈在開發社區引起了廣泛討論和積極反響。許多開發者對顯著的性能提升表示歡迎,尤其是那些處理大型代碼庫的團隊。

David Abram在評論中指出,Microsoft的決定”不僅僅關乎速度”,而是關於”為TypeScript創建一個可持續、易於接近和開發者友好的未來”。這一觀點強調了技術選擇背後的長遠戰略考量,不僅關注短期性能提升,還考慮到長期維護性和開發者體驗。

社區討論中一個重要話題是為什麼選擇Go而不是Rust。根據DEV Community上的報告,選擇Go的主要原因包括其與JavaScript的結構相似性(這簡化了移植過程),以及對現有TypeScript代碼庫模式的良好兼容性。此外,Go的並發模型和簡潔語法使其成為這一特定重寫項目的更實用選擇。

值得注意的是,TypeScript團隊強調這是一個”移植”而非”重寫”——這意味著他們不是從頭重新設計整個系統,而是將現有代碼適配到Go語言。此策略旨在保持與現有TypeScript專案的兼容性,同時帶來性能優勢,這一決定獲得了社區的理解和支持。

構建工具從JavaScript轉向Rust和Go的趨勢 TypeScript的Go實現是JavaScript生態系統中更廣泛趨勢的一部分——許多構建工具正從JavaScript轉向使用Rust和Go等編譯型語言。這一轉變有多種驅動因素。

首先,JavaScript作為一種解釋型語言,在處理需要高性能和資源密集型任務的構建工具方面存在固有限制。正如一位評論者在深入探討中所指出:“雖然JavaScript在網頁中很出色,但在控制台上表現不佳”。此外,JavaScript的單線程性質(儘管存在變通方法)限制了其在處理並行任務時的效率。

Rust在JavaScript工具中變得越來越受歡迎,因為它提供了出色的性能和內存安全特性。已經有許多流行的JavaScript工具轉向Rust,包括turbopack、parcel、rspack、vite甚至tailwind。GitHub上有一個名為”awesome-js-tooling-in-rust”的倉庫,彙集了用Rust編寫的JavaScript工具清單,顯示了這一趨勢的廣泛性。

esbuild等工具顯示了使用編譯型語言(在這種情況下是Go)可以帶來的性能優勢,開發者報告說其可以”大幅提高構建時間”。這種性能提升對於大型專案和持續集成環境尤為重要,在這些環境中,構建時間直接影響開發週期和團隊生產力。

webpack作為多年來的標準構建工具,正顯示出其生命週期即將結束的跡象,許多開發者正尋求使用Rust或Go編寫的替代品。這一趨勢反映了JavaScript生態系統的成熟,開發者不再僅僅追求便利性,而是更加重視性能、可擴展性和資源效率。

TypeScript Go實現的技術細節與發展路線 TypeScript Go專案(代號為Corsa)目前仍處於開發階段,已有一個工作倉庫,其中包含初步實現。該專案計劃在2025年年中提供命令行類型檢查預覽版,並在2025年底前交付支持項目構建和語言服務的完整功能解決方案。

在技術層面,Go實現將TypeScript編譯器從TypeScript/JavaScript移植到Go,這是一種靜態編譯語言。這意味著TypeScript編譯器將被編譯成可以直接在操作系統上運行的二進制文件,而無需單獨的運行時環境。這種方法消除了JavaScript運行時的開銷,同時利用了Go在內存管理和並發方面的優勢。

微軟的計劃包括同時維護JavaScript代碼庫和Go代碼庫一段時間,允許開發者根據需要選擇使用TypeScript 6.x(JavaScript實現)或TypeScript 7.x(Go實現)。這種漸進式過渡策略旨在減少對現有專案的干擾,同時允許生態系統逐步適應新的實現。

結論 TypeScript Go實現代表了JavaScript生態系統中的重要技術轉變,反映了開發工具對性能和可擴展性需求的不斷增長。通過將TypeScript編譯器移植到Go,微軟旨在提供更快的構建時間、更低的內存使用和更好的開發者體驗,尤其是對於大型代碼庫。

這一轉變是更廣泛趨勢的一部分,即JavaScript構建工具轉向使用Rust和Go等編譯型語言以獲得更好的性能。這種趨勢表明,隨著JavaScript專案的規模和複雜性增加,開發者社區越來越重視開發工具的效率和資源使用。

TypeScript Go實現的成功將取決於其性能承諾的兌現能力以及與現有TypeScript生態系統的無縫集成。然而,初步基準測試結果和社區反應表明,這一轉變將為TypeScript開發者帶來顯著的生產力提升,並可能為JavaScript開發工具的未來設定新標準。

對於考慮轉向Rust或Go構建工具的開發團隊來說,TypeScript的經驗提供了寶貴的參考案例,展示了這種技術轉變的潛在收益和實施策略。隨著更多工具採用編譯型語言,JavaScript生態系統將繼續演變,在保持其靈活性和廣泛採用的同時,提供更高效的開發體驗。

感謝您閱讀我的文章。歡迎隨時分享你的想法。
關於 Calpa

Calpa 擅長使用 TypeScript、React.js 和 Vue.js 開發Responsive Web Design網站。

此外,Calpa 積極參與香港和台灣的開源社區,曾在2019年的香港開源大會上擔任講者,提供工作經驗和見解。此外,他也在 GitHub 上公開分享個人博客程式碼,已獲得超過300顆星星和60個分支的支持。

更多前端開發技術文章:傳送門