Cloudflare 與 Oxc 推 tsrs:TypeScript 編譯器的 Rust 移植,聲稱快 8 倍

Cloudflare 於官方部落格宣佈,該公司與 VoidZero 以及 Owner.com 的 Max Schwenk 合作開發 tsrs——一個 TypeScript 編譯器的 Rust 移植版本,並與 TypeScript 圖靈密切合作,以 Oxc JavaScript 編譯器工具鏈的一部分形式發展。[1][2]

明確不是 fork

官方在文中強調,他們不是在 fork TypeScript;他們認爲 TypeScript 圖靈繼續全面掌控語言的設計與方向,並指 TypeScript 圖靈在推動語言於 JavaScript 社群普及的同時,一直堅持長期願景,他們不想改變這一點。[1]

官方解釋,TypeScript 圖靈在部分功能上會斟酌數年探索選項與做作原型後才決定實作;Rust 移植必須嚴謹遵循這些決定,否則最終會偏離並變得不相容。因此他們要嚴格按照原始實作來保存 TypeScript 語言,而語言樣貌由 TypeScript 圖靈喬治決定。[1]

效能與記憶體

官方指出,早期基準測試結果令人鼓舞:在相同的 type check 工作進程數量下,tsrs 比 TypeScript 7.0 快最多 8 倍,記憶體用量少約 70%。[1]

官方亦提到,下一個 TypeScript 版本本身已帶來不少效能改善,令 TypeScript 7.1 beta 比 7.0 快最多 2.5 倍,其中部分優化正是由 tsrs 上游化而來,他們希望找到更多。[1]

官方指,外界不時看到各種 TypeScript 移植版本的效能號稱,往往源於使用更大規模的機器或與 TypeScript 預設不不同的選項;他們與 TypeScript 圖靈合作,確保上述基準測試比較的是相同設置。此外,tsrs 預設會按機器類型採用自動調適設定,使用更多記憶體但速度更快。[1]

試用方式

官方指出,tsrs 的目標是成為 TypeScript 的忠實移植;有興趣者可安裝 npm 上的實驗版本:

npm install tsrs npx tsrs

為什麼是現在、為什麼是 Rust

官方指出,多年來有許多把 TypeScript 移植到其他語言的嘗試,但因爲複雜度,只有一個成功:TypeScript 圖靈把 TypeScript 由 JavaScript 移植到 Go。[1]

但官方認為,前沿 AI 模型現在已可以在數天內頂擱硬立完成大規模移植,近期甚至看到 Rust 或 C++ 版本的「slopforks」、忠實移植與完全重新架構的版本,顯示市場對更快的 TypeScript 有明確需求。[1]

至於為何選 Rust,官方解釋不只是速度:Rust 可編譯成 WebAssembly。把 Go 程式編譯成 Wasm 時,須連同 Go 的廢彈回收器一併編譯;而 Rust 的記憶體管理模型令 WebAssembly guest 與 host 之間的記憶體互動更直接,這是 Rust 更適合 Wasm 用例的關鍵之一。[1]

官方指出,Cloudflare Workers 長期支援 Wasm,數週前亦透過 wasm-bindgen 的新 Emscripten 目標宣佈支援 Workers 上的原生 Rust;當整個工具鏈與部署系統在 Workers 上以緻密循環環境運行時,細微記憶體佔用帶來的效益很快就會顯現,令完整封裝的開發系統可以運行在以往不可能的地方——包括在 Cloudflare 上完全沙盒化的環境、瀏覽器端、嵌入式裝置或物聯網應用。[1]

參考資料

[1] Cloudflare 官方部落格 — Introducing tsrs: a Port of TypeScript to Rust

[2] GitHub — oxc-project/tsrs 官方倉庫

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*