# Ada trên Maguyva: đặc tả, phần thân và đồ thị package

Canonical source: https://maguyva.ai/vi/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 hỗ trợ Ada với AST, ký hiệu và đồ thị, để agent AI có thể lần theo đặc tả package, phần thân, task và tagged type trong các hệ thống Ada lâu năm.

## Tổng quan hỗ trợ

- Cấp độ: Hỗ trợ AST và symbol
- Lập trình
- Phần mở rộng: .ada, .adb, .ads
- Phân tích AST thật cho tìm kiếm nhận biết cú pháp và context cấu trúc.
- Các symbol có tên cung cấp dữ liệu cho tra cứu ngữ nghĩa và tham chiếu chéo. Điều hướng graph khả dụng khi bật trích xuất quan hệ.
- Ngôn ngữ này đóng góp symbol và quan hệ cho tìm kiếm nhận biết graph; các loại edge được hỗ trợ thay đổi theo cấu trúc riêng của ngôn ngữ.
- Cả phân tích AST và trích xuất symbol đều khả dụng.

## Phù hợp nhất

- Các nhóm duy trì Ada lâu năm trong hàng không vũ trụ, quốc phòng, đường sắt hoặc các lĩnh vực độ toàn vẹn cao khác, nơi mọi thay đổi đều được review.
- Codebase tách thành đặc tả `.ads` và phần thân `.adb`, nơi interface và phần triển khai nằm ở các tệp khác nhau.
- Kỹ sư dùng agent AI để phân tích tác động và chuẩn bị review, không phải để sinh mã không có giám sát.

## Workflow agent

- Tìm mọi đơn vị `with` một package trước khi đặc tả của nó thay đổi.
- Lần theo các chương trình con gọi một routine xuyên qua ranh giới package.
- Lập bản đồ task type, protected type và hệ phân cấp tagged type trước một thay đổi về đồng thời hoặc thiết kế.

## Vì sao kho mã Ada cần bản đồ phụ thuộc

Ada tách điều một package hứa hẹn (`.ads`) khỏi cách nó thực hiện (`.adb`). Đó là kỹ thuật tốt, và cũng có nghĩa là một thay đổi chạm vào nhiều tệp mà tìm kiếm văn bản sẽ không nối lại cho bạn. Các hệ thống Ada lâu năm còn thêm một lớp nữa: generic, tagged type, task và protected object, mà quan hệ giữa chúng quan trọng hơn bất kỳ tệp đơn lẻ nào.

Maguyva đưa cho agent bản đồ phụ thuộc này trước khi nó đề xuất thay đổi, đúng theo thứ tự mà một đợt review độ toàn vẹn cao mong đợi.

## Maguyva trích xuất gì từ Ada

Maguyva bao phủ `.ads`, `.adb` và `.ada`. Phần thân chương trình con cùng đặc tả thủ tục và hàm đều được trích xuất thành ký hiệu có thể gọi, nên bạn có thể tìm cả đặc tả lẫn phần thân của một routine. So khớp ký hiệu không phân biệt chữ hoa chữ thường, giống như chính Ada.

Quan hệ nhập đến từ mệnh đề `with` và `use`; từ khóa được bỏ đi để đồ thị lưu tên package. Đồ thị cũng ghi lại lời gọi, kế thừa và ghi đè trên tagged type, khởi tạo, tham chiếu kiểu, đọc và ghi, cùng các cạnh raise và xử lý ngoại lệ.

Trong tìm kiếm cấu trúc, task type, protected type, record type và interface type có thể được chọn làm định nghĩa kiểu, còn entry body được chọn làm phương thức.

## Ví dụ prompt cho agent

- "Những đơn vị nào phụ thuộc vào `Flight_Control.Sensors`, và chúng gọi chương trình con nào của nó?" (`dependency_search` theo chiều vào)
- "Cho xem đặc tả và phần thân của `Compute_Trajectory` cùng mọi nơi gọi nó." (`find_symbol`)
- "Giải thích cách task telemetry chuyển dữ liệu cho protected object ghi log." (`get_task_context`)

## Giới hạn đã biết

- Ada dùng cùng một cú pháp cho một số lời gọi, truy cập trường record và đánh chỉ mục. Maguyva lọc các kiểu dựng sẵn, package thư viện chuẩn, hàm attribute và toán tử (khoảng 113 mẫu) để giữ đồ thị lời gọi gọn gàng, nên lời gọi vào thư viện chuẩn không trở thành cạnh đồ thị. Truy cập trường record và đánh chỉ mục được phân biệt với lời gọi dựa trên vị trí của chúng trong ngữ pháp, không dựa trên danh sách tên trường. Các lời gọi I/O văn bản phổ biến như `Put_Line`, `Put` và `Get` được giữ lại có chủ đích.
- Mệnh đề `use` thay đổi phạm vi nhìn thấy nhưng không được chọn làm nhập trong tìm kiếm cấu trúc; mệnh đề `with` thì được chọn.
- Nút record type và interface type có thể là đoạn không tên, nên tìm kiếm cấu trúc theo tên có thể bỏ sót chúng. Dùng `find_symbol` cho các kiểu có tên.

## Bước tiếp theo

Kết nối một kho mã bằng [hướng dẫn bắt đầu nhanh](/vi/docs/quickstart), sau đó xem ma trận hỗ trợ trên [trang tương thích](/vi/docs/compatibility). Nếu mã Ada của bạn liên kết với C, hãy đọc thêm [hướng dẫn C](/vi/languages/c).

## Chi tiết engine

- Hỗ trợ Ada bao phủ đặc tả `.ads`, phần thân `.adb` và tệp `.ada`. Cả phần thân và đặc tả chương trình con đều là ký hiệu có thể gọi.
- So khớp ký hiệu không phân biệt chữ hoa chữ thường, và mệnh đề `with` cùng `use` trở thành quan hệ nhập sau khi bỏ từ khóa.
- Khoảng 113 kiểu dựng sẵn, package thư viện chuẩn, hàm attribute và toán tử bị lọc khỏi lời gọi; truy cập trường record và đánh chỉ mục được phân biệt với lời gọi dựa trên vị trí của chúng trong ngữ pháp, còn `Put_Line`, `Put` và `Get` được giữ lại có chủ đích.

## Điểm khởi đầu MCP hữu ích

- `find_symbol`: Dùng để tìm cùng lúc đặc tả và phần thân của một chương trình con, kèm các tham chiếu.
- `dependency_search`: Dùng duyệt theo chiều vào trên một package trước khi đặc tả của nó thay đổi, để thấy mọi đơn vị phụ thuộc.
- `get_task_context`: Dùng cho các prompt như “giải thích cách task telemetry chuyển dữ liệu cho protected object ghi log”.
