台灣即時新聞 · 快速準確全面
快訊

Vercel開源tsc-ts編譯器新專案

Vercel開源tsc-ts編譯器新專案 cover

Vercel開源編譯器tsc-ts 5點看懂

  1. Vercel Labs推出開源編譯器tsc-ts,把微軟以Go語言開發的TypeScript 7編譯器,用TypeScript重新實作。
  2. 再透過自家工具scriptc轉換成原生執行檔,執行時不需要依賴Node.js。
  3. 支援型別檢查、輸出JavaScript與型別宣告檔、增量建置,開發者可沿用既有的專案設定。
  4. 開發團隊用約1.25萬個測試檔案、拆成約1.7萬組測試,比對與Go版編譯器的結果,公布的項目全部一致。
  5. 目前仍是實驗性專案,已經上架npm提供macOS、Linux及Windows版本,採用Apache 2.0授權。

Vercel旗下的開發團隊Vercel Labs近日推出開放原始碼編譯器tsc-ts。它的做法相當特別:把微軟以Go語言開發的TypeScript 7.0.2編譯器,重新以TypeScript實作,再透過自家工具scriptc轉換成可以直接執行的原生程式。這款新工具支援型別檢查、JavaScript程式碼輸出及增量建置,目前仍屬於實驗性專案。

要理解tsc-ts的意義,得先從TypeScript說起。TypeScript是JavaScript的延伸語言,最大的特色是可以在開發階段檢查程式碼中的資料型別,協助開發者提早發現錯誤。正因為它的開發者體驗好,TypeScript已經成為現代前端與全端開發的主流選擇之一。

微軟原本就是用TypeScript來開發TypeScript編譯器,但在今年7月發布TypeScript 7時,改用Go語言重新實作。改用Go的原因是效能:透過原生執行與多核心平行處理來加快編譯速度。微軟當時公布的測試顯示,大型專案的完整編譯速度通常比舊版快8至12倍,對大型程式碼庫來說是很有感的提升。

Vercel Labs則走了另一條路。它保留TypeScript作為編譯器的開發語言,再利用自家的scriptc工具產生原生執行檔,讓tsc-ts在執行時不必依賴Node.js。這種做法的好處是,熟悉TypeScript的開發者可以直接閱讀、修改編譯器的原始碼,降低了參與貢獻的門檻,同時又能享受到原生執行檔的啟動速度與執行效率。

在功能面上,tsc-ts的目標是與Go版編譯器看齊。開發者可以維持使用既有的TypeScript專案設定,執行型別檢查、產生JavaScript與型別宣告檔,也支援增量建置,減少重複編譯未變動程式碼的時間。對於已經有大型TypeScript專案的團隊來說,幾乎不需要改變工作流程就能試用。

不過有一個容易誤會的地方:tsc-ts本身雖然是原生程式,但它仍然是把一般的TypeScript專案編譯成JavaScript,而不是直接轉換成機器碼。也就是說,它改變的是編譯器用什麼語言寫成、怎麼執行,而不是編譯出來的產物是什麼。最終產出的JavaScript,一樣是在瀏覽器或Node.js上執行。

為了證明相容性,開發團隊做了大規模的測試:使用約1.25萬個測試檔案,拆分成約1.7萬組測試,逐一比對tsc-ts與Go版編譯器在型別檢查、錯誤訊息及程式碼輸出上的結果。根據專案公布的資訊,這些測試項目的結果全部與Go版一致。這對一個實驗性專案來說,是相當有說服力的成績單。

tsc-ts已經透過npm提供macOS、Linux及Windows版本,採用Apache 2.0授權,任何人都可以自由使用與修改。此外,tsc-ts也提供了編譯器介面,可以供scriptc等工具使用,開發團隊表示仍在持續改善相容性與效能。

這項專案也反映了開發工具界的一個趨勢:大家不再滿足於能用就好,而是開始追求編譯速度、啟動速度與開發體驗的全面提升。微軟用Go重寫是為了效能,Vercel用TypeScript重寫則是為了生態系的親和力,兩種路線其實回答的是同一個問題:下一代的開發工具應該長什麼樣子。

對開發者的實用建議是:tsc-ts目前仍是實驗性質,適合在個人專案或非關鍵專案中試用,觀察它在實際專案中的穩定度與速度表現。如果測試結果令人滿意,再考慮導入正式的工作流程。畢竟編譯器是開發流程的核心環節,穩定性永遠優先於嚐鮮。