微軟用 AI 代理將 GitHub Copilot 運行時從 TypeScript 全量移植至 Rust,整個過程只花了約 12 萬美元的 token 成本加一名工程師三週時間。

這個運行時比多數用戶想象得更要命:它支撐着 GitHub Copilot CLI、Copilot App、SDK 和 Copilot 雲 Agent,還會出現在 VS Code、Visual Studio、Excel、Outlook、PowerPoint 以及一堆微軟雲服務中。原本它用 TypeScript 配 Node.js,好處是開發快,但規模化之後,啓動速度和服務器密度都成了瓶頸。

性能實測:每秒 7.55 次提升到 120 次,內存降九成

微軟傑出工程師 Stephen Toub 把整個過程寫成了長文。數據顯示,AI agents 把 43 萬行 TypeScript 變成了 80 萬行生產級 Rust,跨越 135 個 release、14.5 周,平均每天開 1.3 個移植用 PR。成本大頭是 token——約 12 萬美元,外加開發者三週人工。Toub 表示,這活兒要是純手工,得花幾年、砸幾百萬美元。

性能收益相當實在:在一個基準測試中,原 TypeScript 實現每秒處理 7.55 個單輪會話生命週期,Rust 進程內跑到了 120 個,特定負載下實現 15.9 倍加速。內存佔用差距更誇張——10 客戶端的一批 agents,TypeScript 吃掉 1383MB,Rust 只要 126MB,因爲 Rust 版本全程在進程內完成,無需像 TypeScript 那樣爲補全額外拉起後臺子進程。

“AI 瘋狂吐代碼”的畫面幾乎是反的

有意思的是,這次移植也在給“AI 編程”祛魅。Toub 觀察到,agents 花在收集信息上的時間遠超寫代碼本身。“大衆印象裏 AI 瘋狂吐代碼的畫面幾乎是反的;在這個規模上,工作看起來更像迭代式調查——檢查當前狀態、形成假設、做一處針對性修改,然後循環。”

最棘手的文件是 session.ts,3 萬多行 TypeScript,觸及運行時的方方面面。移植它花了 25 小時,光讀文檔就佔 56 分鐘、做了 122 次工具調用來澄清需求,隨後 spawn 了 15 個子會話,每個都有自己的 worktree 和 agent 並開始互相通信;一個內置編排技能會找到所有活躍會話,給任務重疊的發消息請求協作。

不過這次移植也暴露了用 AI 寫 Rust 的坑:整個過程中出現了幾十個迴歸——原本正常的東西改完不工作了。Toub 總結道:“如果編譯通過就代表正確,那這句話只配當笑話聽。”編譯器並不知道函數順序對不對、任務代價是否可接受。上週蒙特利爾 RustConf 上,顧問 Lisa Crossman 也警告別把編譯器當“神諭”:“Rust 阻止 agent 寫內存不安全的代碼,但不阻止它寫錯誤卻正確的程序。”

作爲對照,Bun 作者 Jarred Sumner 最近幾乎全用 Claude agents 把 Anthropic 的 JS 運行時從 53.5 萬行 Zig 搬到 Rust,花了 16.5 萬美元 token,在 Linux x64 glibc 上已通過 99.8% 的 Bun 既有測試——但 Zig 創始人 Andrew Kelley 至今稱其代碼爲“沒人審的垃圾”。連同這次 Copilot 運行時移植,“AI 大規模重寫”正在成爲一類可驗證的工程現實:便宜、夠快,但驗收標準必須靠人去盯住“編譯通過”之外的語義正確性。