# Ada บน Maguyva: สเปก บอดี และกราฟแพ็กเกจ

Canonical source: https://maguyva.ai/th/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 รองรับ Ada ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ 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` โดยตัดคีย์เวิร์ดออกเพื่อให้กราฟเก็บชื่อแพ็กเกจ กราฟยังบันทึกการเรียก การสืบทอดและการ override ในแท็กด์ไทป์ การสร้างอินสแตนซ์ การอ้างอิงชนิดข้อมูล การอ่านและการเขียน และเส้นเชื่อมการโยนและการจัดการเอกซ์เซปชันด้วย

ในการค้นหาเชิงโครงสร้าง เลือกไทป์แบบทาสก์, ไทป์แบบโพรเทกเต็ด, ไทป์เรคคอร์ด และไทป์อินเทอร์เฟซเป็นนิยามชนิดข้อมูลได้ และเลือกบอดีของเอนทรีเป็นเมธอดได้

## ตัวอย่างพรอมต์สำหรับเอเจนต์

- "หน่วยใดพึ่งพา `Flight_Control.Sensors` และเรียกซับโปรแกรมใดของแพ็กเกจนี้" (`dependency_search` ทิศทางขาเข้า)
- "แสดงสเปกและบอดีของ `Compute_Trajectory` พร้อมผู้เรียกทั้งหมด" (`find_symbol`)
- "อธิบายว่าทาสก์ด้านเทเลเมทรีส่งข้อมูลให้ออบเจกต์แบบโพรเทกเต็ดของการบันทึกล็อกอย่างไร" (`get_task_context`)

## ข้อจำกัดที่ทราบ

- Ada ใช้ไวยากรณ์เดียวกันสำหรับการเรียกบางอย่าง การเข้าถึงฟิลด์ของเรคคอร์ด และการเข้าถึงด้วยดัชนี Maguyva จึงกรองชนิดข้อมูลในตัว แพ็กเกจไลบรารีมาตรฐาน ฟังก์ชันแอตทริบิวต์ และตัวดำเนินการ (ราว 113 รูปแบบ) เพื่อให้กราฟการเรียกสะอาด การเรียกไลบรารีมาตรฐานจึงไม่กลายเป็นเส้นเชื่อมในกราฟ การเข้าถึงฟิลด์ของเรคคอร์ดและการเข้าถึงด้วยดัชนีแยกออกจากการเรียกด้วยตำแหน่งในไวยากรณ์ ไม่ใช่ด้วยรายชื่อฟิลด์ ส่วนการเรียก I/O ข้อความที่พบบ่อยอย่าง `Put_Line`, `Put` และ `Get` ถูกเก็บไว้โดยตั้งใจ
- อนุประโยค `use` เปลี่ยนการมองเห็น แต่ไม่ถูกเลือกเป็นการนำเข้าในการค้นหาเชิงโครงสร้าง ขณะที่อนุประโยค `with` ถูกเลือก
- โหนดของไทป์เรคคอร์ดและไทป์อินเทอร์เฟซอาจเป็นส่วนที่ไม่มีชื่อ การค้นหาเชิงโครงสร้างตามชื่อจึงอาจพลาดไป ใช้ `find_symbol` สำหรับชนิดข้อมูลที่มีชื่อ

## ขั้นตอนถัดไป

เชื่อมต่อรีโพซิทอรีด้วย[คู่มือเริ่มต้นใช้งาน](/th/docs/quickstart) แล้วดูตารางการรองรับได้ที่[หน้าความเข้ากันได้](/th/docs/compatibility) หาก Ada ของคุณเชื่อมกับภาษา C ให้อ่าน[คู่มือภาษา C](/th/languages/c) ด้วย

## รายละเอียดเอนจิน

- การรองรับ Ada ครอบคลุมสเปก `.ads` บอดี `.adb` และไฟล์ `.ada` ทั้งบอดีและสเปกของซับโปรแกรมเป็นสัญลักษณ์ที่เรียกใช้ได้
- การจับคู่สัญลักษณ์ไม่สนตัวพิมพ์เล็กใหญ่ และอนุประโยค `with` กับ `use` กลายเป็นความสัมพันธ์การนำเข้าหลังตัดคีย์เวิร์ดออก
- ชนิดข้อมูลในตัว แพ็กเกจไลบรารีมาตรฐาน ฟังก์ชันแอตทริบิวต์ และตัวดำเนินการราว 113 รายการถูกกรองออกจากการเรียก การเข้าถึงฟิลด์ของเรคคอร์ดและการเข้าถึงด้วยดัชนีแยกออกจากการเรียกด้วยตำแหน่งในไวยากรณ์ และ `Put_Line`, `Put` และ `Get` ถูกเก็บไว้โดยตั้งใจ

## จุดเริ่มต้น MCP ที่มีประโยชน์

- `find_symbol`: ใช้เพื่อหาสเปกและบอดีของซับโปรแกรมพร้อมกัน รวมถึงการอ้างอิง
- `dependency_search`: ใช้การท่องกราฟทิศทางขาเข้าบนแพ็กเกจก่อนเปลี่ยนสเปก เพื่อดูทุกหน่วยที่พึ่งพา
- `get_task_context`: ใช้กับพรอมต์อย่าง “อธิบายว่าทาสก์ด้านเทเลเมทรีส่งข้อมูลให้ออบเจกต์แบบโพรเทกเต็ดของการบันทึกล็อกอย่างไร”
