Antigravity 科學程式移植案例,59 分鐘把 Fortran 核心改寫成 Rust 的關鍵
Antigravity 科學程式移植案例以 59 分鐘將 Fortran 海洋模型核心轉成 Rust。本文拆解基準、100 組數值比對、42 項測試與 1.88 倍速度提升,說明研究團隊如何設計自己的驗收。
Antigravity 科學程式移植案例最值得關注的,是它把原始結果保留下來,再讓 AI 一邊改寫、一邊編譯和比對。對維護老程式的人來說,這正是移植最耗時間的部分。
研究室常用的舊程式,承載著多年調整過的方程式與經驗。即使語言老舊、建置麻煩,只要輸出仍被信任,團隊就很難承擔一次全面重寫的風險。
Google 在 2026 年 11 月 3 日公開一個內部案例,使用 Gemini 4 Argon 與 Antigravity,在 59 分鐘內把海洋模型的核心求解器移植到 Rust。台灣時間 11 月 4 日的官方貼文再次介紹詳細流程。官方文章
官方報告的結果包括模擬速度提高到 1.88 倍、尖峰記憶體用量減少 54%,以及 100 組隨機種子的數值比對。這些數字來自該次工作負載,適合拿來觀察代理如何驗收自己的改動。
這套流程對有測試基準的研究團隊有參考價值。因為輸出差異能被量測,所以人可以把審查焦點放在物理意義、案例覆蓋與是否值得正式移植。
Antigravity 科學程式移植為何先保存舊版結果?
保存舊版結果,是為改寫建立一把可以反覆使用的尺。只要新版開始輸出不同數字,團隊就能回到同一組輸入,追查差異從哪個改動出現。
Google 選擇的來源是 FVCOM 沿海海洋模型,來源庫包含 174,774 行 Fortran 90 與 C 程式,分散在 264 個檔案。這個規模描述的是來源庫,官方成果則聚焦於核心求解器。案例範圍
求解器可以理解為把水流、深度等條件轉成模擬結果的運算核心。因為研究者依賴它判讀物理現象,所以移植除了語法改寫,也要保留重要的計算行為。
舊語言為什麼特別難移植?
舊版 Fortran 常把資料放在跨檔案共用的區域。某個檔案改動一個值,可能影響另一個檔案的計算,所以只翻譯眼前的一段函式,很容易遺漏全域關係。
陣列索引與隱含型別也會增加難度。前者決定程式從哪個位置讀寫資料,後者讓變數型態由命名或規則推定,兩者都可能在改寫時造成細小但持續累積的差異。
因此,這次流程先編譯原始程式,記錄執行時間、記憶體與輸出,再分析跨檔案依賴。測量先建立好,後面的每次修改才有可以比較的對象。
這也解釋了代理環境的重要性。模型需要能操作終端機、編譯器與測試工具,才能讓改寫後的結果回到下一輪判斷,持續完成同一個工作。

59 分鐘的流程如何分配?
這 59 分鐘包含建立基準、規畫及核心移植。Google 把過程分成三個階段,每一階段都產生可被後續流程使用的輸出。
| 階段 | 官方紀錄時間 | 完成的工作 |
|---|---|---|
| 基準擷取 | 11 分鐘 | 編譯舊版、建立 100 組種子的比較基準 |
| 全庫檢視與藍圖 | 3 分鐘 | 追蹤全域變數、整理缺陷與模組設計 |
| 核心移植與最佳化 | 45 分鐘 | 產生 Rust 模組、反覆測試、效能分析 |
表中的最後階段產生 13 個 Rust 模組,官方表示每個模組少於 240 行。這讓核心改寫的規模更清楚,也避免把來源庫的 17 萬多行直接當成完成轉換的行數。階段紀錄
藍圖如何幫助後面的改寫?
藍圖先把隱藏在共用變數裡的依賴整理成模組關係。因為資料從哪裡來、誰會修改它變得明確,代理才能在拆開檔案時保留求解器的運作順序。
Google 也為任務設定記憶體安全、熱點迴圈避免動態配置,以及檔案大小等限制。這些規則會影響設計方式,讓產出的 Rust 程式有一致的約束。
Rust 的記憶體安全規則,會限制程式如何持有和存取資料。這有助於提早攔下部分錯誤,但物理方程的選擇和數值方法仍需研究者判斷。
所以適合參考的是任務結構。團隊可以把自己最在意的限制寫進藍圖,再把哪些結果必須一致、哪些差異可以接受,轉成明確的驗收條件。
六個缺陷和 42 項測試透露了什麼?
移植過程也讓原先藏在舊程式裡的邊界問題浮現。當新語言要求更明確的資料範圍時,一些過去可以繼續執行的讀寫行為就會被攔下。
Google 列出的問題包括固定欄寬緩衝區溢位、整數乘法溢位、陣列越界、未初始化讀取,以及鹽度變成微小負值時仍計算平方根。這些都是官方對該次程式分析的描述。缺陷細節
其中一個例子出現在岸線邊界。原始程式利用索引 0 代表缺少的鄰接單元,又把第一個單元的深度複製進去,避免除以零,於是邊界運算與單元編號產生了不直觀的關係。
這類寫法能否改成更清楚的資料型態,需要同時理解程式與物理條件。代理找出可疑關係後,研究者仍應確認新寫法對應的邊界處理是否合理。
測試失敗如何回到修改迴圈?
官方記錄的首輪單元測試有一項失敗,原因是只有一層水體時,垂直通量求解仍嘗試讀取下面一層。Rust 的範圍檢查把錯誤轉成明確的執行失敗。
代理讀取錯誤資訊後補上單層網格處理,再重新執行測試。最後合計 42 項單元、性質與文件測試通過,分支覆蓋率為 96.8%。測試過程
分支覆蓋率表示測試執行到多少條條件路徑。它能讓團隊找出尚未走過的程式分支,但是否涵蓋重要的海況與長時間模擬,仍要另外列出測試案例。
100 組輸出一致要怎麼讀?
Google 表示,100 組隨機種子的比對在 12 位小數精度符合,並報告差異為 3.91 × 10 的負 13 次方。這提供了具體的誤差量級,適合用來判斷這次設定下的數值接近程度。
原先任務要求寫了零差異,但實際成果應以公開的誤差數字描述。研究團隊若要沿用流程,還需要依模型的敏感性決定可接受範圍,尤其是多步運算後可能被放大的差異。
實務上的下一步,是加入原先隨機種子沒有涵蓋的邊界條件。這樣才能把「本次比對接近」逐步擴展成對自己研究用途有意義的驗收結果。
1.88 倍速度提升從哪裡來?
效能改善有可追蹤的中間階段,方便團隊判斷每次改動是否值得保留。Google 同時公布執行時間與記憶體用量,讓速度提高的過程可以分開看。
| 程式階段 | 執行時間 | 相對速度 | 尖峰記憶體 |
|---|---|---|---|
| 原版 Fortran/C | 883 毫秒 | 1 倍 | 11.84 MB |
| 安全 Rust 核心 | 682 毫秒 | 1.29 倍 | 6.39 MB |
| 調整資料排列與重用工作區 | 548 毫秒 | 1.61 倍 | 5.83 MB |
| 加入執行剖析引導最佳化 | 469 毫秒 | 1.88 倍 | 5.48 MB |
表中的比較限於官方選定的模擬。從 883 毫秒降到 469 毫秒,意味這組工作跑完所需時間約減少 47%,因此讀者可以把速度倍數換成實際等待時間來理解。官方效能表
重複配置記憶體為何會拖慢計算?
舊程式在核心迴圈反覆建立及釋放暫存陣列,讓時間花在資料準備。把工作區預先配置並重複使用後,就能減少這些額外動作。
資料排列也會影響處理器取得連續資料的效率。這次使用同類資料放在一起的方式,讓迴圈更容易讀到需要的欄位,對大量重複計算尤其有幫助。
最後的最佳化則依賴實際執行資料。編譯器先觀察哪些路徑經常使用,再調整程式布局與運算安排,所以代表性工作負載會影響最佳化效果。
這些改善來自配置、資料結構與編譯流程的共同變動。因此,評估自己的專案時,可以保留分階段量測,確認效益來自哪個改動,也方便處理回歸。
如何在自己的研究專案小範圍試用?
Google 已把流程整理成公開技能,包含基準發現、缺陷檢視、Rust 工作區、測試比對及效能報告。技能提供可重用的工作指令,團隊可以依自己的驗收要求調整。Google Skills
第一次試用適合選可獨立執行的計算核心。因為輸入輸出邊界明確,就比較容易保存舊版結果、控制變動範圍,也能在結果不符合要求時回到原始版本。
開始前,可以先保存來源版本、編譯旗標、測試輸入和設備條件。這些資料能幫助另一位研究者重做比較,避免把環境差異誤認成語言或模型的效果。
執行時,讓代理逐步保存藍圖、測試輸出與效能紀錄。若需要調整誤差標準或方程處理方式,則交回領域負責人判斷,再讓代理依新的條件繼續。
技能頁提供的指令是 /migrate-to-rust <github-repo-url>,但正式使用仍需先檢查技能內容與執行環境。對團隊來說,可審查的規則與可重做的結果,會比單次耗時更容易帶進研究流程。
延伸閱讀 CLAUDE.md 怎麼寫?2026 記憶、Rules、Skills 與 5 種任務模板教學
延伸閱讀 Claude Projects 完整教學(2026),知識庫、指令與新版雲端工作怎麼分?
Antigravity 科學程式移植常見問題
17 萬多行都已經轉成 Rust 了嗎?
174,774 行是來源程式庫的規模。Google 描述的成果是核心求解器移植成 13 個 Rust 模組,所以評估案例時要保留這個範圍。官方案例
自己的專案也能在 59 分鐘完成嗎?
59 分鐘是這次內部案例的紀錄。自己的耗時會受到建置環境、來源依賴、測試完整度與移植範圍影響,因此先讓一個小核心完成完整比較,較容易取得可用的估計。
通過 Rust 編譯後還要驗證什麼?
編譯與記憶體安全檢查能處理一部分程式問題。研究用途還需要核對數值誤差、邊界條件與真實案例,讓結果能對應所研究的物理現象。
官方影片在哪裡?
可以觀看 Google 原文嵌入的示範影片,再對照三階段流程與效能表理解操作。影片與文章是同一案例的官方材料。官方示範影片
把領域驗收留在流程裡,才能把移植成果用進研究
這個案例適合有可重現基準、又想改善核心程式維護性的團隊參考。把舊版輸出、改寫與測試接成迴圈,可以縮短尋找差異的路程,讓研究者有更多時間檢查物理意義。
接下來可以從 公開技能 的驗收規則開始,挑一個具有代表性的小型核心,建立自己可以重做的基準。等測試、誤差與效能結果都能解釋,再擴大移植範圍。