跳至主要內容
cd /languages
  • 高可靠程式碼
  • 程式語言
  • AST 與符號支援

Maguyva 對 Ada 的支援:規格、本體與套件圖譜

Maguyva 以 AST、符號與圖譜支援 Ada,讓 AI 代理能在長期運作的 Ada 系統中追蹤套件規格、本體、任務與標記型別。

為什麼 Ada 儲存庫需要一張相依關係圖

Ada 把套件承諾做什麼(.ads)與它如何做(.adb)分開。這是優秀的工程實務,但也意味著一次修改會牽動多個檔案,而文字搜尋無法替你把它們串起來。長期運作的 Ada 系統還多了一層:泛型、標記型別、任務與受保護物件,它們之間的關係比任何單一檔案都更重要。

Maguyva 會在代理提出修改之前把這張相依關係圖交給它,這也正是高可靠審查要求的順序。

Maguyva 在 Ada 中擷取了什麼

Maguyva 涵蓋 .ads、.adb 與 .ada。子程式本體,以及程序和函式規格,都會被擷取為可呼叫的符號,因此常式的規格與本體都能搜尋。符號比對不區分大小寫,與 Ada 本身一致。

匯入來自 with 與 use 子句,關鍵字會被移除,圖譜中保存的是套件名稱。圖譜也會記錄呼叫、標記型別上的繼承與覆寫、實例化、型別參照、讀寫,以及例外的引發與處理邊。

在結構搜尋中,任務型別、受保護型別、記錄型別與介面型別可以作為型別定義選取,入口本體則可以作為方法選取。

代理提示範例

  • 「哪些單元依賴 Flight_Control.Sensors,它們呼叫了其中哪些子程式?」(dependency_search 的 incoming 方向)
  • 「顯示 Compute_Trajectory 的規格、本體與所有呼叫端。」(find_symbol)
  • 「說明遙測任務如何把資料交給記錄用的受保護物件。」(get_task_context)

已知限制

  • 在 Ada 中,部分呼叫、記錄欄位存取與索引使用相同的語法。為了讓呼叫圖保持乾淨,Maguyva 會過濾內建型別、標準函式庫套件、屬性函式與運算子(約 113 個模式),因此對標準函式庫的呼叫不會成為圖譜的邊。記錄欄位存取與索引是依其在語法中的位置與呼叫區分開來,而不是靠欄位名稱清單。Put_Line、Put 與 Get 等常用文字 I/O 呼叫是刻意保留的。
  • use 子句會改變可見性,但在結構搜尋中不會被選為匯入;with 子句則會。
  • 記錄型別與介面型別的節點可能是匿名片段,因此依名稱進行的結構查詢可能會漏掉它們。查找具名型別請使用 find_symbol。

下一步

透過快速入門連接儲存庫,然後在相容性頁面查看支援矩陣。如果你的 Ada 程式碼與 C 繫結,也請閱讀 C 指南。

最適合的情境

  • > 在航太、國防、鐵路等高可靠領域維護長期 Ada 程式碼、且每次變更都要審查的團隊。
  • > 程式碼分成 `.ads` 規格與 `.adb` 本體、介面與實作位於不同檔案的程式碼庫。
  • > 將 AI 代理用於影響分析與審查準備,而非未經審查的程式碼生成的工程師。

代理工作流程

  • > 在變更套件規格之前,找出所有 `with` 了該套件的單元。
  • > 跨越套件邊界,追蹤哪些子程式呼叫了某個常式。
  • > 在並行或設計變更之前,梳理任務型別、受保護型別與標記型別的階層。

引擎細節

  • > Ada 支援涵蓋 `.ads` 規格、`.adb` 本體與 `.ada`。子程式的本體與規格都是可呼叫的符號。
  • > 符號比對不區分大小寫,`with` 與 `use` 子句會移除關鍵字後成為匯入關係。
  • > 約 113 個內建型別、標準函式庫套件、屬性函式與運算子會從呼叫中過濾掉;記錄欄位存取與索引依其在語法中的位置與呼叫區分開來,`Put_Line`、`Put` 與 `Get` 是刻意保留的。

實用的 MCP 進入點

  • find_symbol

    用來一次找到某個子程式的規格與本體,以及它的參照。

  • dependency_search

    在變更套件規格之前使用 incoming 走訪,查看所有依賴它的單元。

  • get_task_context

    適合用於「說明遙測任務如何把資料交給記錄用的受保護物件」這類提示。