# Maguyva의 Ada 지원: 명세, 본체, 패키지 그래프

Canonical source: https://maguyva.ai/ko/languages/ada

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva는 AST, 심볼, 그래프로 Ada를 지원하여, AI 에이전트가 오래 쓰인 Ada 시스템의 패키지 명세, 본체, 태스크, 태그드 타입을 따라갈 수 있게 합니다.

## 지원 현황 요약

- 등급: AST 및 심볼 지원
- 프로그래밍
- 확장자: .ada, .adb, .ads
- 구문 인식 검색과 구조적 컨텍스트를 위한 실제 AST 파싱을 제공합니다.
- 이름이 지정된 심볼은 시맨틱 조회와 상호 참조에 활용됩니다. 관계 추출이 활성화된 경우 그래프 내비게이션을 사용할 수 있습니다.
- 이 언어는 그래프 인식 검색에 심볼과 관계를 제공합니다. 지원되는 에지 유형은 언어 고유의 구문 구조에 따라 다릅니다.
- AST 파싱과 심볼 추출을 모두 지원합니다.

## 가장 적합한 경우

- 항공우주, 국방, 철도처럼 모든 변경을 검토하는 고신뢰 분야에서 오래된 Ada를 유지보수하는 팀.
- 인터페이스와 구현이 서로 다른 파일에 있는, `.ads` 명세와 `.adb` 본체로 나뉜 코드베이스.
- AI 에이전트를 검토 없는 코드 생성이 아니라 영향 분석과 검토 준비에 쓰는 엔지니어.

## 에이전트 워크플로

- 패키지 명세를 바꾸기 전에 그 패키지를 `with`하는 유닛을 모두 찾습니다.
- 패키지 경계를 넘어 어떤 서브프로그램이 루틴을 호출하는지 추적합니다.
- 동시성이나 설계 변경 전에 태스크 타입, 보호 타입, 태그드 타입 계층을 매핑합니다.

## 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`을 사용하세요.

## 다음 단계

[빠른 시작](/ko/docs/quickstart)으로 저장소를 연결한 다음, [호환성 페이지](/ko/docs/compatibility)에서 지원 매트릭스를 확인하세요. Ada 코드가 C와 바인딩되어 있다면 [C 가이드](/ko/languages/c)도 읽어 보세요.

## 엔진 세부 정보

- Ada 지원은 `.ads` 명세, `.adb` 본체, `.ada`를 포함합니다. 서브프로그램 본체와 명세는 모두 호출 가능한 심볼입니다.
- 심볼 매칭은 대소문자를 구분하지 않으며, `with`와 `use` 절은 키워드를 떼어 낸 뒤 임포트 관계가 됩니다.
- 약 113개의 내장 타입, 표준 라이브러리 패키지, 속성 함수, 연산자는 호출에서 걸러집니다. 레코드 필드 접근과 인덱싱은 문법상 위치로 호출과 구분하며, `Put_Line`, `Put`, `Get`은 의도적으로 남겨 둡니다.

## 유용한 MCP 진입점

- `find_symbol`: 서브프로그램의 명세와 본체를 참조와 함께 한 번에 찾을 때 쓰세요.
- `dependency_search`: 패키지 명세를 바꾸기 전에 incoming 탐색을 써서 의존하는 모든 유닛을 확인하세요.
- `get_task_context`: “텔레메트리 태스크가 로깅용 보호 객체에 데이터를 어떻게 넘기는지 설명해 줘” 같은 프롬프트에 쓰세요.
