TypeScript 最近宣佈的 Go 語言原生實現(被稱為 TSGo 或 Corsa)標誌著這一流行編程語言發展歷程中的重要里程碑。這項於 2025 年 3 月 11 日公布的重大技術轉變,不僅展示了引人矚目的性能提升,還反映了更廣泛的 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 生態系統將繼續演變,在保持其靈活性和廣泛採用的同時,提供更高效的開發體驗。