本文へスキップ
cd /languages
  • 高信頼性コード
  • プログラミング
  • AST・シンボル対応

MaguyvaのAda対応: 仕様、本体、パッケージのグラフ

MaguyvaはAST、シンボル、グラフでAdaに対応しています。AIエージェントは長く使われるAdaシステムのパッケージ仕様、本体、タスク、タグ付き型をたどれます。

Adaリポジトリに依存関係マップが必要な理由

Adaは、パッケージが約束すること(.ads)と、それをどう実現するか(.adb)を分けています。これは優れた設計ですが、1つの変更が複数のファイルに及び、テキスト検索ではそのつながりが見えないことも意味します。長く使われる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

    「テレメトリータスクがロギング用の保護オブジェクトにデータをどう渡すかを説明して」のようなプロンプトに使ってください。