重點摘要
用 AI 代理寫出的「記憶體安全」程式碼,可能比原來更不安全
Anthropic 旗下 Bun 團隊以數十個 Claude agents 在 11 天內將 100 萬行 Zig 改寫為 Rust,Zig 創始人 Kelley 公開批評此舉製造了更大的記憶體安全技術債。
改寫後含 13,044 個 unsafe 區塊,每行密度比同規模手寫 Rust 高出 181 倍,等同放棄了 Rust 的核心安全保證,而非提升安全性。
此事件引爆 AI 時代的工程信任危機:記憶體安全的關鍵從未是語言選擇,而是工程文化、程式碼審查制度,以及速度壓力下是否維持品質標準。
前情提要
章節一:Andrew Kelley 的指控——Anthropic Rust 程式碼中的 unsafe 違規實錄
2026 年 5 月,Bun 團隊(隸屬 Anthropic 旗下)以數十個 Claude AI agents,在 6 至 11 天內將近 100 萬行 Zig 程式碼全數改寫為 Rust,產出共 6,755 個 commit 與 681,000 行 Rust 程式碼,並合併入主線。
技術部落客 Ray Myers 量化了最關鍵的數字:改寫後的 Rust 版本含有 13,044 個 unsafe 區塊,而同等規模的手寫 Rust 專案 uv(35 萬行)僅有 73 個——每行 unsafe 密度高出約 181 倍。
名詞解釋
Rust 的unsafe關鍵字代表「我自行承擔編譯器無法驗證的記憶體不變量」;大量使用 unsafe 等同放棄了 Rust 最核心的記憶體安全保證。
Zig 創始人 Andrew Kelley 指出,AI agents 採取「逐檔遷移」策略,直接將 Zig 的全域可變狀態模式搬進 Rust,而非重新設計記憶體架構。這意味著 Zig 的手動記憶體管理穿上 Rust 外衣,依然是手動記憶體管理。
Kelley 進一步列出多項被 Bun 聲稱因改寫才獲得的進步——包括 LTO(鏈結時最佳化)、二進位體積縮小——認為每一項本可在 Zig 版本中實現。他同時質疑 Bun 從未公開改寫後的 Rust 編譯時間,而 Zig 的 clean build 僅需 16 秒。
名詞解釋
LTO(Link-Time Optimization,鏈結時最佳化)是在連結階段跨編譯單元進行最佳化的技術,可提升執行效能並縮小二進位體積。
章節二:社群分裂——「AI 公司寫不好系統程式」的信任危機
Bun 被 Anthropic 收購後以 AI agents 大規模改寫,觸發了多個社群的強烈反應。Zig 社群早在 2026 年 4 月即宣佈禁止任何 LLM 生成的程式碼貢獻,此次事件被視為其政策的具體佐證。
HN 用戶 endospore 點出技術核心:「他們引入了數倍於原先的記憶體安全問題,因為違反了 Rust 特有的規則。那些 unsafe 區塊有多少根本不健全,更糟的是,多少個 // SAFETY 注解純粹是胡說八道。」
Kelley 的批評也指向更深層的價值分歧。他形容 Bun 舊程式碼是「層疊的 hack、濫用 assert,以驚人速度衝功能,幾乎不留時間反思」,並明確表示:「核心問題與語言特性毫無關係,一切都在於分歧的價值體系。」
HN 用戶 nihsett 觀察到 Kelley 的文章後來新增了一段敘事:Bun 選擇 Rust 改寫的部分動機是行銷考量——展示 Anthropic Fable 模型的 AI agents 能力,而 Zig 社群明確反對使用 Anthropic 產品,使這次改寫同時具有商業論述價值。
Kelley 對此直言批評:Bun 的部落格文章「幾乎像是一家萬億美元公司的行銷部門,在這篇文章上押了大注。」他指控 Anthropic「先開了第一槍」,使整場爭論升級為 AI 公司商業利益與開源社群工程文化的正面衝突。
章節三:AI 時代的程式設計師焦慮:是工具取代還是技能轉型?
Bun 公告聲稱「近 100% AI 貢獻」,Jarred Sumner 自稱「幾個月沒有親自打程式碼」,讓討論超越純技術爭論,觸及工程師職涯的深層焦慮。
HN 用戶 nathansherburn 道出了許多人的心聲:「作為一個不在『財務自由』俱樂部的人,我非常擔心那些對 AI 進展渾然不覺的同行。你不需要相信 AI 全是炒作才能反對 AI——它可以同時是有害的,又是真實的。」
Ray Myers 的分析指出一個矛盾:每一個改寫中的設計決策,都在強化「AI 還不夠用」的事實,而非 Anthropic 聲稱的「AI 已足以勝任生產系統」。這讓 Bun 事件成為 AI 代理能力的一面照妖鏡。
HN 社群也出現了更細緻的觀點:概念驗證因 AI 而變得便宜了,但缺乏情感投入的 AI 生成代碼更容易被拋棄;工程師在設計時承受的「摩擦感(思考時間)」反而讓人對決策負責,可能產出更好的結果。
章節四:記憶體安全不只是語言選擇——制度、審查與工程文化的系統性問題
TigerBeetle 以 TigerStyle 風格指南在 Zig 中達成高可靠性,而 Bun 從未認真嘗試類似的工程規範。這個對比揭示一個關鍵洞見:記憶體安全的真正挑戰不在於語言選擇,而在於工程文化與審查制度的整體水準。
Myers 指出 Bun 的邏輯自相矛盾:一邊稱工程風格指南「難以執行」,一邊卻用 AI agentic review 做程式碼驗證,卻在最需要嚴格審查的 unsafe 語言特性上大量妥協。
Kelley 觀察 Bun 多年,發現過去每週約有 4 次記憶體 bug 修復 commit,認為根因是缺乏 fuzzing,而非 Zig 語言本身的缺陷。這意味著系統性引入 fuzzing 測試,即使不切換語言也能解決大部分問題。
名詞解釋
Fuzzing(模糊測試)是一種以隨機或半隨機輸入持續轟炸程式的測試技術,能有效發現記憶體錯誤、緩衝區溢出等難以手動觸發的漏洞。
此次事件的更大啟示在於:當 AI agents 以驚人速度生成大量程式碼,工程師的角色不是消失,而是更加關鍵——必須設計出 AI 代理無法繞過的架構約束與審查機制,才能在高速生產下維護品質標準。
多元觀點
正方立場
Kelley 的批評有具體數據支撐:13,044 個 unsafe 區塊,等同每行 unsafe 密度比優質手寫 Rust 高出 181 倍,這不是工程細節,而是根本性的架構失敗。
AI agents 的逐檔遷移策略無法重新設計記憶體架構,只能將 Zig 的全域可變狀態模式照搬進 Rust,使所謂的「記憶體安全遷移」實為行銷包裝。
HN 用戶 endospore 指出,許多 unsafe 區塊不僅不健全 (unsound) ,其 // SAFETY 注解甚至是「胡說八道」,在 miri 工具下根本無法通過驗證——這意味著程式碼在理論上存在未定義行為 (UB) ,問題比原版 Zig 更嚴重。
反方立場
HN 用戶 jeremyjh 指出,Bun 與 JavaScript GC 的互動創造了 Zig 環境中獨特的記憶體管理挑戰,Kelley 的反駁完全迴避了這個問題,讓批評顯得不夠完整。
Rust 即使有大量 unsafe 區塊,仍提供了比 Zig 更豐富的型別系統與工具鏈;測試套件的廣泛覆蓋也降低了 unsafe 被濫用的實際風險,遷移後的安全性是否真的更差仍有待觀察。
大規模 AI 代理改寫是工程探索,初版品質不完美是合理預期;關鍵問題是後續是否有計劃系統性清理 unsafe 區塊,以初版狀態定論成敗過於草率。
中立/務實觀點
此次爭論的核心真相可能是:Bun 團隊在速度壓力下選擇了最省力的遷移路徑,AI agents 忠實地複製了這個選擇,而非 AI 技術本身的極限。
記憶體安全問題從來都是工程文化問題。無論是 Zig、Rust 或其他語言,缺乏 fuzzing、缺乏程式碼審查規範、缺乏架構約束,都會讓任何語言的安全保證形同虛設。
真正值得關注的問題不是「AI 代理能否寫好系統程式」,而是「組織是否建立了讓 AI 代理無法繞過的品質關卡」——這是 Bun 事件留給整個產業的功課。
實務影響
對開發者的影響
此次事件是一個警訊:在高速 AI 輔助開發的環境中,程式碼審查能力比以往更加重要。
當 AI 代理可以在幾天內生成數十萬行程式碼,識別「哪些 unsafe 是合理的」以及「哪些 // SAFETY 注解是胡說八道」,成為工程師必須掌握的核心技能。
具體行動:
- 在 Rust 專案中定期執行
cargo clippy和cargo miri掃描 unsafe 區塊 - 建立 unsafe 區塊的審查規範,要求每個 unsafe 必須對應明確的不變量說明
- 對 AI 生成的程式碼採用更嚴格的靜態分析門檻,而非與人工審查相同標準
對團隊/組織的影響
Bun 事件揭示了「工程文化」作為基礎設施的重要性。TigerBeetle 的 TigerStyle 指南展示了即使在 Zig 這樣沒有自動記憶體安全的語言中,嚴格的工程文化也能達成高可靠性。
組織應在引入 AI 代理開發流程之前,先建立明確的品質閘道——包括 fuzzing 覆蓋率要求、unsafe 區塊數量上限、以及 CI 中的 miri 驗證。這些閘道必須設計成 AI 代理無法繞過的硬性約束。
短期行動建議
- 審計現有程式碼庫的 unsafe 區塊密度,與同規模的高品質開源專案對比建立基線
- 在下次大規模 AI 輔助重構前,先完成 fuzzing 覆蓋率的基線建立
- 參考 TigerStyle 風格指南,為團隊制定適合自身語言的工程規範文件
社會面向
產業結構變化
Bun 事件標誌著一個新的產業現象:AI 公司收購開源工具後,以 AI agents 進行大規模改寫,同時將這個過程包裝為 AI 能力的展示案例。這模糊了工程決策與行銷敘事的界線。
Zig 社群在 2026 年 4 月的 LLM 程式碼禁令,代表開源社群開始建立對 AI 生成程式碼的主動防禦機制,這可能成為未來更多開源專案的標準政策。
倫理邊界
此次爭論中最尖銳的倫理問題在於:當一家 AI 公司的行銷部門有強烈動機展示 AI 能力,工程決策是否能保持客觀?
Kelley 的指控——Anthropic「先開了第一槍」——揭示了 AI 公司在宣傳自身產品時,可能無意間將未成熟的工具暴露在生產環境中,並以「成功案例」對外呈現,誤導其他工程師對 AI agents 能力邊界的判斷。
長期趨勢預測
AI 代理程式碼生成的品質問題不會因此消失,但「如何驗證 AI 生成程式碼的安全性」將成為一個獨立的工程子領域——包括自動化 unsafe 區塊分析、AI 輔助的 fuzzing、以及針對 AI 生成代碼的專用靜態分析工具。
長期來看,Bun 事件可能是一個轉捩點:它迫使整個產業承認「AI 生成代碼的審查成本」是真實存在的工程負擔。只有將這個成本計入 AI 輔助開發的總體效益估算,才能做出更理性的工具選擇。
唱反調
Bun 的測試套件廣泛覆蓋了遷移後的行為,Rust 的型別系統即使有大量 unsafe 區塊,仍提供了比原有 Zig 程式碼更豐富的編譯期保護;unsafe 區塊數量不等於 bug 數量,以初版狀態定論安全性過於草率。
AI 代理改寫的成本遠低於人工,即使初版品質不完美,後續以人工審查系統性清理 unsafe 區塊的速度也可能超越傳統全人工改寫方式;判斷應基於最終狀態而非初版產出。
社群風向
他們引入了(至少)數倍於原先的記憶體安全問題,因為違反了 Rust 特有的規則。看看那些 unsafe 區塊有多少根本不健全 (unsound) ,更糟的是,多少個 `// SAFETY` 注解純粹是胡說八道——任何合理的使用方式都會觸發未定義行為。我們通常會用 miri 驗證一個專案是否站得住腳,而這個專案連 clippy 都過不了。
作為一個不在「財務自由」俱樂部的人,我非常擔心那些對 AI 進展渾然不覺的同行。你不需要相信 AI 全是炒作才能反對 AI——它可以同時是有害的,又是真實的。
當你拿到 agents 需要改進的證據,卻選擇摀住耳朵說「這不是他們的錯」——這種立場完全是愚蠢的。
Zig 創始人的文章似乎有更新過?我不記得幾天前讀的時候有最後那段。Ray 的故事版本是:面對記憶體 bug 的真實挑戰,本來有幾個可行選項,但管理層積極批准了 Rust 改寫方案,因為這是展示 Fable 模型的絕佳行銷機會,加上 Anthropic 本來就用 Rust,而 Zig 社群又公開反對使用 Anthropic 的產品。這個動機解釋相當合理。
起初的理由確實不充分,但老實說,我不需要那些例子也能理解 Jarred 的挫折感。對我來說有幫助的是他對 Bun 如何與 JavaScript 垃圾回收器互動所帶來的獨特記憶體挑戰的解釋——Andrew 完全沒有回應這一點。了解測試套件如何覆蓋新代碼也很有幫助,很多人以為測試也是 AI「神翻譯」過來的,根本不可信。
炒作指數
行動建議
在現有 Rust 專案中執行 `cargo clippy` 和 `cargo miri`,統計 unsafe 區塊數量並與同規模優質開源專案(如 uv、ripgrep)對比,建立你自己的安全密度基線。
參考 TigerStyle 風格指南,為團隊制定 unsafe 區塊的審查規範——強制要求完整的不變量說明,並在 CI 中加入自動化 unsafe 密度警示閾值。
追蹤 Bun 後續版本中 unsafe 區塊的清理進度,以及 Zig 社群 LLM 禁令的執行效果,作為評估 AI 代理程式碼品質改善趨勢的現實基準。