Gemini 4 Argon 開始處理大型程式遷移:Google 的 Rust 案例,團隊可以學到什麼?

讀清 Google 程式改寫的比較條件,以功能等價、固定測量與小範圍審查,規劃能驗收的工程試行。

Share
綠色代碼橋樑構圖,文字為程式遷移、Rust 改寫與驗收。
綠色程式遷移封面。雷司紀編輯部製作,AI 生成示意圖。 圖片來源:https://www.aiposthub.com/

請 AI 寫一個新函式,通常很快就能看到成果。讓它改寫已經運作多年的核心程式,真正困難的地方會在之後才出現。資料格式、錯誤處理、速度與外部使用方式,都可能因一個看似合理的修改而改變。Gemini 4 Argon 公告中的大型程式遷移案例,因此比單純的程式碼長度更有參考價值。

Google 報告了將既有 C 與 C++ 程式移往 Rust 的工作,以及影像解碼程式的效能改善。本文會先讀清這些案例的比較條件,再把可借鑑的方法整理成小團隊能規劃的試行。這些是官方案例與工程設計建議,並非本文對 Argon 的實測,也不代表一般帳號已能使用。

程式遷移的目標,要能用行為說明

程式遷移是把既有軟體搬到不同的語言、架構或執行環境,同時保留必要功能。對使用者而言,重要的往往是同一份資料仍得到相同結果。若原本會拒絕錯誤日期,改寫後卻自動修正。若原本能處理大型檔案,改寫後只在小檔案成功,就還沒有完成遷移。

Rust 是一種強調記憶體安全的程式語言。記憶體安全關係到程式能否避免某些不當存取記憶體的錯誤,但使用 Rust 並不會自動保證所有商業規則正確。日期計算、金額精度與權限邏輯,仍需要有明確規格與測試。評估遷移時,語言選擇與功能驗收應一起考慮。

以虛構的報表系統為例,一個舊模組負責把訂單資料匯出成表格。遷移成功的定義可能是欄位順序一致、金額計算一致、特殊文字不會被截斷,並且既有下載流程仍可使用。這些條件寫清楚,模型才有具體目標,人工審查也能針對行為判斷,而非只看程式是否漂亮。

Google 案例中的二點七倍,必須看清比較對象

Argon 發布公告指出,代理在 libgav1 的既有 Rust 移植版本上,替換了約三萬兩千行涉及平行資料處理的程式,透過反覆效能實驗與編譯器輸出分析改善結果。Google 報告新版比原本的 Rust 移植版本快二點七倍,影像輸出相同,並更接近最佳化的 C++。

這個比較對象很重要。不能把二點七倍改寫成所有程式都會加速,也不能說新版比原始最佳化 C++ 快二點七倍。對團隊而言,值得借鑑的是先有一個可比較的起點,讓每次改動能回到相同資料與條件測量。沒有這個起點,速度提升的故事很難轉成自己的工程決策。

公告也提到 Google 其他大型改寫工作正在接受自動與人工審查、模擬測試及上線前覆核。這說明程式產生只是工作的一段。大型遷移需要建立足夠證據,才能讓維護者相信結果可接手,尤其涉及核心服務時,更要能說明出錯後如何恢復。

Google 官方 DeepSWE v1.1 評測圖,Gemini 4 Argon 得分為 77.9%。
Google 公佈的 DeepSWE v1.1 軟體工程評測。結果需搭配官方方法閱讀,並以自己的程式驗證。 圖片來源:Google / Google DeepMind。

軟體工程評測,提供的是選題方向

模型頁列出 DeepSWE v1.1 等程式代理評測。這類任務比單次補一段程式,更接近持續處理工程問題。代理指模型會依工作目標安排多個步驟,並使用工具推進。分數可以幫你選擇觀察方向,不能直接當作你公司的修復成功率。

官方評測方法文件說明不同程式測試使用的執行安排與資料來源。比較模型時,不只要看名字,也要看工具、時間與思考設定。若你自己的環境沒有相同工具,或任務涉及私人程式中的特殊規則,實際表現就需要另做檢查。

對團隊來說,第一個試行題目最好有答案可查。可以選已知錯誤的歷史修復,或行為清楚的小模組改寫。這樣能比較模型是否找到真正原因、修改是否足夠小、測試是否能證明問題解除。從這裡開始,遠比直接交出整個專案更容易理解能力與成本。

先建立舊程式的輸入與輸出樣本

遷移前,先讓舊程式產生一批可以留存的輸出。資料應包含一般情況,也包含容易被忽略的邊界,例如空值、過長文字、特殊日期與極端數量。這批樣本會成為改寫後的比較材料。若某些既有行為本身有問題,則應另行標記,避免在遷移途中偷偷改變需求。

報表模組可以保存同一批訂單的原始資料與匯出結果。改寫後再輸出一次,比較欄位、數字與文字。某些差異可能只在格式,例如時間表示方式不同。另一些差異會改變下游使用者的操作。比較時應先決定哪些必須完全一致,哪些可以接受,讓模型與審查者遵守同一標準。

如果外部系統依賴特定錯誤訊息或檔案名稱,這些也屬於行為。只測主要計算函式,可能漏掉實際流程。你可以列出使用者會經過的幾個操作路徑,確保改寫後都能完成。這種驗收不需要一開始涵蓋整套系統,但應覆蓋選定模組真正負責的範圍。

讓 AI 每次只處理可審查的一段

一份巨大修改很難看清原因。較實際的安排是先畫出模組邊界,交代它的輸入、輸出與外部依賴,再一次修改一個責任清楚的部分。模型可以讀較多背景,交付的差異仍應保持可審查。這能讓人工注意力集中在必要改動,也讓失敗時較容易定位。

交付要求可以包括三件事:修改內容、對應測試,以及仍未涵蓋的條件。模型如果提出更動資料格式,就應說明原因與影響。若為了通過測試刪除重要檢查,審查者也能立即發現。清楚的交付契約,比只要求「幫我改成 Rust」更容易得到能接手的成果。

遇到規格衝突時,先保存具體例子。舊文件說金額四捨五入到小數兩位,實際程式卻採其他方式,這是需求判斷,不能單靠模型自行決定。把衝突交給負責人確認,再回到原本的小範圍修改,可以避免遷移同時變成未經討論的產品改版。

效能比較需要固定資料、設備與計算方式

若改寫的目標包含速度,測量條件應固定。相同資料量、相同設備、相同程式設定,才容易看出改動本身的差別。測量前也要決定看的是平均完成時間、較慢情況,還是整批處理量。不同指標回答不同問題,不能挑一個最好看的數字當作全部成果。

以報表模組為例,產出一百筆資料很快,未必代表十萬筆也能穩定完成。可以準備小、中、大三種資料量,再記錄時間與記憶體使用。若新版平均較快,卻偶爾出現極長等待,對使用者仍可能造成問題。把完整條件寫進結果,團隊才能判斷改善是否值得保留。

測量也應包含產物正確性。新版程式如果少輸出一些欄位,當然可能更快,但沒有完成同一份工作。Google 案例強調影像輸出相同,提醒我們速度與結果不能分開看。自己的試行也應先通過必要的行為比較,再討論是否達到效能目標。

安全改善要回到具體錯誤類型

如果選擇 Rust 是為了減少特定記憶體風險,應先指出原本哪一類操作容易出問題。新語言的特性可以降低部分風險,但其他錯誤仍會存在,例如處理了錯誤資料、漏掉權限檢查或把機密內容寫進紀錄。不要讓「安全語言」成為免除審查的理由。

審查者可以把問題分成幾類:資料行為是否相同、錯誤路徑是否保留、外部依賴是否新增,以及資源使用是否合理。每次小範圍改寫只檢查受影響的條件,會比漫無目的地重看整個專案有效。當多個部分完成,再檢查它們一起運作時的整體流程。

同時應留下回復方法。即使測試通過,正式環境仍可能出現資料樣本沒有涵蓋的情況。保留舊版本、清楚記錄切換範圍與觀察指標,可以縮短問題發生後的處理時間。這些是軟體遷移的基本工作,也會影響 AI 產出的程式是否真正具有交付價值。

工程師的時間,會從打字移到選題與驗收

模型能快速提出修改,工程師仍需要判斷哪段程式值得先動、哪些規則不能改,以及測試結果是否足夠。這些判斷往往來自對產品與歷史的理解。當程式生成變快,團隊更需要保存原本只存在少數人記憶裡的例外條件,讓後續修改不必反覆猜測。

對管理者而言,衡量成效可以看完成一個可驗收修改的總時間。這包括整理背景、生成、測試、審查與修正。若模型省下寫碼時間,卻讓審查多花兩倍,流程還需要調整。反之,若它能提出清楚的小差異與可重跑測試,即使生成不夠華麗,也可能更有價值。

初次試行不必追求最大的行數。選擇一個範圍清楚、測試容易、維護價值高的模組,通常能學到更多。記錄哪些資訊最常被追問、哪些錯誤反覆發生,再改善下一題的背景資料。團隊會逐漸建立可重用的遷移方法,讓後續模型升級也有相同的比較基礎。

把試行結果寫成下一次能沿用的紀錄

試行完成後,可以留下模組範圍、使用資料、必要行為、測量條件與審查結果。這份紀錄不必很長,但應讓另一位工程師能重新執行比較。若改寫沒有改善,也記下限制來自哪裡:依賴難以搬動、效能瓶頸不在這段,或測試不足以支持切換。

下一次模型更新時,就能用同一個題目觀察變化,省下重新定義測試的時間。對團隊而言,持續累積可重跑的工程題目,會讓選擇新工具更有依據,也把每次試行的學習留在組織裡,而非只存在當次操作的人手中。

常見問題

Argon 能把整個 C++ 專案一鍵改成 Rust 嗎?

官方案例顯示它可以參與大型遷移,但不能據此保證任意專案一鍵完成。外部依賴、平臺差異與產品行為都會影響難度。實務上應先選定模組,保存原本的行為樣本,再以小範圍修改與測試逐步推進,讓每一步都有可查的完成證據。

二點七倍速度提升,可以套用到我的程式嗎?

那是 Google 報告的特定 libgav1 案例,相對於既有 Rust 移植版本的結果。你的資料、設備與瓶頸不同,不能直接套用倍數。可以借鑑固定比較條件、反覆實驗與確認輸出一致的方法,再看自己的模組是否得到可重現的改善。

普通開發團隊現在能直接使用 Argon 嗎?

截至十月一日,官方說明 Argon 先透過 Fairwind 提供給受信任的防禦者,後續會擴大存取。一般團隊應確認正式開放與帳號權限。等待期間可以先整理歷史修復題、測試資料與遷移目標,這些準備也能用在目前已有的程式工具上。

先挑一段有明確行為的程式

Google 的案例讓我們看到,長任務模型開始參與更深的工程工作。團隊最值得帶走的方法,是讓每次改寫都有可比較的起點與可驗收的終點。選一個需要維護的小模組,留下輸入輸出樣本,寫清楚不能改變的行為,再規劃一次小範圍試行,就能把新模型的話題轉成可追蹤的工程進展。

官方資料來源