AI 知識

真正的門檻不是生成,而是驗證

AI 寫程式的新聞,最容易被兩個數字帶走:寫了多少行,以及花了多少時間。

最近 Bun 從 Zig 遷移到 Rust 的案例,把這種震撼推到新的高度。Bun 官方表示,原有程式碼約 535,496 行,不含註解;一名工程師監控 Claude Code 的動態工作流,在 11 天內完成大規模遷移,峰值同時運行約 64 個 Claude,最高產出速度約每分鐘 1,300 行。

如果只看到這裡,很容易得到一個結論:大型軟體重寫,已經變成把工作丟給 AI 等結果。

但官方文章緊接著說了一句更重要的話:在產出速度最高的那個階段,這些程式還不能運作。

這才是整件事真正值得理解的地方。

行數是輸出量,不是完成度

程式碼可以快速生成,但軟體不是文字集合。每一段程式都要和既有架構、資料格式、記憶體生命週期、錯誤處理、作業系統差異及外部函式庫一起運作。

只要其中一個假設錯了,程式可能仍能編譯,甚至能通過大部分測試,卻在特定時序、平台或輸入下失敗。

Bun 官方列出的遷移錯誤就很典型:有些 Zig 與 Rust 寫法看起來幾乎一樣,實際語意卻不同。像是只在 debug build 執行的判斷、負數時間轉換,以及切片長度處理,都可能讓看起來合理的移植產生 regression。

官方最終記錄了 19 個已知功能退化問題,並表示已修正。這個數字不是失敗證明,反而提醒我們:即使有大型模型、完整測試與大量審查,巨型遷移仍不可能自動等於零風險。

一句指令不是工作流

這次遷移並不是輸入一句要求之後等待完成。

在大量產碼前,流程先建立 PORTING.md,整理 Zig 與 Rust 的型別、慣用寫法及遷移規則;再建立 LIFETIMES.tsv,分析跨檔案的記憶體生命週期。正式擴大前,先用三個檔案試跑,確認規則能被執行。

接著,每批任務交給一個 implementer 產生程式,再由兩個獨立 adversarial reviewers 專門找出錯誤與不一致,最後由 fixer 套用修正。

這個設計有一個重要觀念:寫作者不負責證明自己正確。

因為不論人或模型,完成一份工作後都容易偏向接受自己的答案。把審查放到不同脈絡,並明確要求 reviewer 假設程式有錯,比叫同一個模型再檢查一次,更容易找出盲點。

測試不是裝飾,而是可執行規格

Bun 能嘗試這種規模的遷移,其中一個關鍵條件,是既有測試套件使用 TypeScript 撰寫,不依賴底層實作語言。

換句話說,無論核心是 Zig 還是 Rust,同一批外部行為都能被重複驗證。官方列出的資料顯示,各平台有超過一百萬次 expect() 檢查;合併前,所有平台測試套件都通過,而且沒有跳過或刪除測試。

這種測試的價值,不是替 AI 背書,而是讓需求從我們覺得差不多,變成可以反覆執行的判斷。

但測試也不是絕對答案。Zig 作者 Andrew Kelley 的反方意見值得保留:如果測試足以證明大量新程式正確,為什麼同一套測試沒能阻止舊程式的問題?他認為工程資源、程式品質與維護文化,不應被簡化成程式語言的勝負。

這個質疑很重要。測試只能檢查它涵蓋的行為,不能自動證明所有未被想到的情況都安全。因此流程還需要 Miri、sanitizer、fuzzing、production telemetry 與人類審查補上不同角度。

AI 時代,完成的定義正在改變

以前,工程進度常用寫完多少功能衡量。當 AI 能快速產出大量程式碼,這個指標會越來越沒有意義。

更可靠的完成定義應該包括:

  1. 有沒有明確的規格與行為邊界。
  2. 寫作者之外,是否有獨立角色專門找錯。
  3. 是否有能重複執行的測試,而不是只看一次 demo。
  4. 是否在不同平台與真實環境驗證。
  5. 發現錯誤後,是只修眼前一行,還是修正會反覆產生錯誤的流程。

AI 讓生成成本下降,也讓驗證的重要性上升。

真正有價值的能力,不只是讓模型做更多,而是設計一套機制,讓錯誤能被看見、被推翻、被修正,而且每一次失敗都讓下一輪流程更可靠。

所以,53.5 萬行不是這個案例最值得記住的數字。

更值得記住的是:當 AI 寫得快到人類無法逐行跟上,工程團隊必須把信任改造成一套可以執行、可以追蹤,也可以否決答案的系統。

查證摘要

  • Bun 官方文章:Bun in Rust。確認原 Zig 程式碼約 535,496 行、不含註解;一名工程師監控動態工作流,歷時 11 天完成大規模遷移;峰值約每分鐘 1,300 行,但當時程式仍不能運作。
  • Anthropic 活動頁:Code with Claude。確認主題是團隊如何用 Claude Code dynamic workflows 將 Bun 重寫為 Rust。
  • Andrew Kelley 評論:My thoughts on Bun's Rust rewrite。提供反方觀點,指出工程資源、程式品質與維護文化同樣重要,也質疑測試充分性的論證。
  • Bun GitHub issue:issue #30719。遷移後社群仍曾回報 dangling reference / undefined behavior 問題,支持測試與編譯通過不等於零風險。
回文章列表