ข้ามไปที่เนื้อหา
cd /languages
  • เนทีฟโค้ดในระดับใหญ่
  • การเขียนโปรแกรม
  • รองรับ AST และสัญลักษณ์

C++ บน Maguyva: กราฟคลาสและการเรียกสำหรับโค้ดเบสขนาดใหญ่

Maguyva รองรับ C++ ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามคลาส namespace การ override แบบเสมือน และผู้เรียกในโค้ดเบส C++ ขนาดใหญ่

ทำไม C++ ต้องการโครงสร้าง ไม่ใช่การค้นหาข้อความ

ใน C++ ชื่อไม่ได้มีเพียงหนึ่งเดียว send อาจเป็นฟังก์ชันอิสระ เป็นสมาชิกของสามคลาส และเป็นการ override ในคลาสที่สี่ namespace, เทมเพลต และนิยามนอกคลาส เช่น Socket::send ในไฟล์ .cpp แยกชนิดข้อมูลหนึ่งออกไปหลายไฟล์ การค้นหาข้อความคืนทุกผลที่ตรงกัน แต่ไม่ได้บอกเอเจนต์ว่าการเรียกไปจบที่ตัวใด

Maguyva ทำดัชนีคลาส สมาชิก และการเรียกพร้อมเจ้าของ เพื่อให้เอเจนต์ติดตามโครงสร้างจริงก่อนแก้ไข

Maguyva ดึงอะไรจาก C++ ได้บ้าง

Maguyva ครอบคลุมนามสกุลไฟล์ซอร์สและเฮดเดอร์ของ C++ ที่ใช้กันทั่วไป รวมถึง .cpp, .cc, .cxx, .hpp, .hh และ .hxx คลาส struct และฟังก์ชันถูกดึงออกมา และนิยามนอกคลาสอย่าง void Socket::send() จะถูกนับเป็นของคลาสเจ้าของและ namespace สมาชิกเสมือนถูกบันทึกไว้ และพารามิเตอร์เทมเพลตเป็นส่วนหนึ่งของซิกเนเจอร์

การระบุชนิดของรีซีฟเวอร์ติดตามพารามิเตอร์ การประกาศท้องถิ่น ฟิลด์ ลูป for แบบเรนจ์ และ auto และมองทะลุ unique_ptr, shared_ptr และ optional การเรียกอย่าง conn->send() จึงรีโซลฟ์ไปยังคลาสที่ถูกต้อง อนุประโยคคลาสฐานป้อนข้อมูลการสืบทอด และนิพจน์ new นับเป็นการสร้างอินสแตนซ์

การปิดบังมาโคร export และแอนโนเทชัน แบบเดียวกับ C ถูกใช้ที่นี่ด้วย ชื่อในไลบรารีมาตรฐานราว 273 ชื่อ (std::cout, std::endl, printf และอื่น ๆ ทำนองเดียวกัน) ถูกกรองออกจากความสัมพันธ์ กราฟบันทึกการเรียก การ include การสืบทอด การ override การสร้างอินสแตนซ์ การอ้างอิงชนิดข้อมูล การอ่านและการเขียน และเส้นเชื่อม throw

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

  • “คลาสใด override Renderer::draw และใครเรียกมัน” (dependency_search)
  • “แสดง OrderBook::match และผู้เรียกทั้งหมดให้ดู” (find_symbol)
  • “อธิบายว่าข้อความข้อมูลตลาดไปถึงเอนจินกลยุทธ์ได้อย่างไร” (get_task_context)

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

  • .h อยู่ในรายการนามสกุลไฟล์ของ C, C++ และ Objective-C ในโครงสร้างไฟล์ที่ผสม C กับ C++ เฮดเดอร์จึงถูกแบ่งกันระหว่างโปรไฟล์เหล่านี้
  • ตัวมาโครแบบออบเจกต์จะไม่ถูกแยกวิเคราะห์ และการเรียกชื่อในไลบรารีมาตรฐานที่ถูกกรองไม่เป็นเส้นเชื่อมในกราฟ ใช้ text_pattern_search สำหรับมาโครและการใช้ std::

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

เชื่อมต่อรีโพซิทอรีด้วยคู่มือเริ่มต้นใช้งาน แล้วดูตารางการรองรับได้ที่หน้าความเข้ากันได้ หากบางส่วนของโครงสร้างเป็น C ล้วน ให้อ่านคู่มือภาษา C ด้วย

เหมาะที่สุดสำหรับ

  • > เกมเอนจิน ระบบเทรด เบราว์เซอร์ และโค้ดเบส C++ ขนาดใหญ่อื่น ๆ ซึ่งการเปลี่ยนเฮดเดอร์เดียวทำให้ต้อง build ใหม่ครึ่งโครงสร้าง
  • > ลำดับชั้นคลาสที่มีเมธอดเสมือนซึ่งเมธอดที่ทำงานจริงถูกนิยามไว้คนละที่กับจุดที่ถูกเรียก
  • > การรีแฟกเตอร์ที่มีเอเจนต์ช่วย ซึ่งต้องรู้ผู้เรียกและการ override ก่อนเปลี่ยนซิกเนเจอร์

เวิร์กโฟลว์ของเอเจนต์

  • > หาทุกการ override ของเมธอดเสมือนก่อนเปลี่ยนคลาสฐาน
  • > แสดงรายการผู้เรียกของฟังก์ชันหรือเมธอดคลาสที่อยู่ใน namespace เช่น `net::Socket::send` ทั่วทั้งโค้ดเบส
  • > ติดตามว่าคลาสถูกสร้างด้วย `new` ที่ใด และหลังจากนั้นแตะสมาชิกใดบ้าง

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

  • > นิยามนอกคลาสอย่าง `void Socket::send()` ถูกนับเป็นของคลาสเจ้าของและ namespace และสมาชิกเสมือนถูกบันทึกไว้
  • > การระบุชนิดของรีซีฟเวอร์ติดตามพารามิเตอร์ ตัวแปรท้องถิ่น ฟิลด์ `for` แบบเรนจ์ และ `auto` และมองทะลุ `unique_ptr`, `shared_ptr` และ `optional`
  • > อนุประโยคคลาสฐานป้อนข้อมูลการสืบทอด นิพจน์ `new` นับเป็นการสร้างอินสแตนซ์ และชื่อในไลบรารีมาตรฐานราว 273 ชื่อถูกกรองออกจากความสัมพันธ์

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

  • find_symbol

    ใช้กับชื่อที่ระบุเต็มอย่าง `OrderBook::match` เมื่อต้องการนิยามและผู้เรียก

  • dependency_search

    ก่อนเปลี่ยนซิกเนเจอร์ ใช้บนคลาสฐานหรือเมธอดเสมือน เพื่อหาการ override และผู้เรียก

  • get_task_context

    ใช้กับพรอมต์อย่าง “อธิบายว่าข้อความข้อมูลตลาดไปถึงเอนจินกลยุทธ์ได้อย่างไร”

คู่มือที่เกี่ยวข้อง

ส่วนอื่นของรีโพที่เกี่ยวข้อง

ดูคู่มือทั้งหมด
แกนกลางของระบบ การเขียนโปรแกรม

C บน Maguyva: กราฟการเรียกสำหรับโค้ดระบบและโค้ดฝังตัว

ในภาษา C กราฟการเรียกคือสถาปัตยกรรม เอเจนต์ควรอ่านมันก่อนแก้ไข

รองรับ AST และสัญลักษณ์ การแยกวิเคราะห์ AST การสกัดสัญลักษณ์ ความสัมพันธ์ในกราฟ

นามสกุลไฟล์

.c, .h

เปิดคู่มือ
ปลอดภัยมาก่อน การเขียนโปรแกรม

การรองรับ Rust ใน Maguyva: บริบทที่ปลอดภัยสำหรับการเปลี่ยนแปลงด้วยความช่วยเหลือของ AI

เกี่ยวข้องเมื่อคุณต้องการความช่วยเหลือจาก AI ใน Rust โดยไม่สูญเสียการ์ดเรลเชิงโครงสร้างที่ทำให้ Rust คุ้มค่าที่จะใช้

รองรับ AST และสัญลักษณ์ การแยกวิเคราะห์ AST การสกัดสัญลักษณ์ ความสัมพันธ์ในกราฟ

นามสกุลไฟล์

.rs

เปิดคู่มือ