सामग्री पर जाएँ
cd /languages
  • बड़े पैमाने पर नेटिव कोड
  • प्रोग्रामिंग
  • AST और सिंबल सपोर्ट

Maguyva में C++: बड़े कोडबेस के लिए क्लास और कॉल ग्राफ़

Maguyva, C++ को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट बड़े C++ कोडबेस में क्लास, नेमस्पेस, वर्चुअल ओवरराइड और कॉलर ट्रेस कर सकें।

C++ को टेक्स्ट सर्च की नहीं, संरचना की ज़रूरत क्यों है

C++ में नाम अनोखे नहीं होते। send कोई फ़्री फ़ंक्शन, तीन क्लास का मेंबर और चौथी क्लास में ओवरराइड हो सकता है। नेमस्पेस, टेम्पलेट और क्लास के बाहर की परिभाषाएँ, जैसे किसी .cpp फ़ाइल में Socket::send, एक type को कई फ़ाइलों में बाँट देती हैं। टेक्स्ट सर्च हर मिलान लौटाता है, लेकिन एजेंट को यह नहीं बताता कि कॉल किस तक पहुँचता है।

Maguyva क्लास, मेंबर और कॉल को उनके ओनर के साथ इंडेक्स करता है, ताकि एजेंट एडिट करने से पहले असली संरचना को फ़ॉलो करे।

Maguyva, C++ से क्या निकालता है

Maguyva आम C++ सोर्स और हेडर एक्सटेंशन को कवर करता है, जिनमें .cpp, .cc, .cxx, .hpp, .hh और .hxx शामिल हैं। क्लास, structs और फ़ंक्शन निकाले जाते हैं, और void Socket::send() जैसी क्लास के बाहर की परिभाषा ओनर क्लास और namespace से जोड़ी जाती है। वर्चुअल मेंबर दर्ज होते हैं, और टेम्पलेट पैरामीटर सिग्नेचर का हिस्सा होते हैं।

रिसीवर टाइपिंग पैरामीटर, लोकल घोषणाओं, फ़ील्ड, रेंज-आधारित for लूप और auto को फ़ॉलो करती है, और unique_ptr, shared_ptr और optional के अंदर तक देखती है, ताकि conn->send() जैसा कॉल सही क्लास पर रिज़ॉल्व हो। बेस-क्लास क्लॉज़ इनहेरिटेंस को फ़ीड करते हैं, और new एक्सप्रेशन इंस्टैंशिएशन गिने जाते हैं।

C वाली export और एनोटेशन मैक्रो मास्किंग यहाँ भी लागू होती है। लगभग 273 स्टैंडर्ड-लाइब्रेरी नाम (std::cout, std::endl, printf और इसी तरह के) संबंधों से फ़िल्टर किए जाते हैं। ग्राफ़ कॉल, इनक्लूड, इनहेरिटेंस, ओवरराइड, इंस्टैंशिएशन, टाइप रेफ़रेंस, रीड और राइट, और throw एज दर्ज करता है।

एजेंट प्रॉम्प्ट के उदाहरण

  • “कौन-सी क्लास Renderer::draw को ओवरराइड करती हैं, और उसे कौन कॉल करता है?” (dependency_search)
  • “मुझे OrderBook::match और उसके हर कॉलर को दिखाओ।” (find_symbol)
  • “समझाओ कि मार्केट-डेटा संदेश स्ट्रैटेजी इंजन तक कैसे पहुँचता है।” (get_task_context)

ज्ञात सीमाएँ

  • .h C, C++ और Objective-C की एक्सटेंशन सूचियों में आता है, इसलिए C और C++ मिले ट्री में हेडर इन प्रोफ़ाइल के बीच बँट जाते हैं।
  • ऑब्जेक्ट-जैसे मैक्रो की बॉडी पार्स नहीं होती, और फ़िल्टर किए गए स्टैंडर्ड-लाइब्रेरी नामों को किए गए कॉल ग्राफ़ एज नहीं हैं। मैक्रो और std:: उपयोग के लिए text_pattern_search इस्तेमाल करें।

अगले कदम

क्विकस्टार्ट से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स कम्पैटिबिलिटी पेज पर देखें। अगर ट्री का कुछ हिस्सा शुद्ध C है, तो C गाइड भी पढ़ें।

सबसे उपयुक्त

  • > गेम इंजन, ट्रेडिंग सिस्टम, ब्राउज़र और दूसरे बड़े C++ कोडबेस, जहाँ एक हेडर बदलने से आधा ट्री फिर से बिल्ड होता है।
  • > वर्चुअल मेथड वाले क्लास पदानुक्रम, जहाँ चलने वाला मेथड वहाँ परिभाषित होता है जहाँ उसे कॉल नहीं किया जाता।
  • > एजेंट की मदद से रीफ़ैक्टरिंग, जिसे सिग्नेचर बदलने से पहले कॉलर और ओवरराइड चाहिए।

एजेंट वर्कफ़्लो

  • > बेस क्लास बदलने से पहले किसी वर्चुअल मेथड का हर ओवरराइड ढूँढना।
  • > पूरे कोडबेस में `net::Socket::send` जैसे नेमस्पेस वाले फ़ंक्शन या क्लास मेथड के कॉलर की सूची बनाना।
  • > कोई क्लास `new` से कहाँ बनती है और उसके बाद किन मेंबर को छूती है, इसे ट्रेस करना।

इंजन विवरण

  • > `void Socket::send()` जैसी क्लास के बाहर की परिभाषाएँ अपनी ओनर क्लास और namespace से जोड़ी जाती हैं, और वर्चुअल मेंबर दर्ज होते हैं।
  • > रिसीवर टाइपिंग पैरामीटर, लोकल, फ़ील्ड, रेंज-आधारित `for` और `auto` को फ़ॉलो करती है, और `unique_ptr`, `shared_ptr` और `optional` के अंदर तक देखती है।
  • > बेस-क्लास क्लॉज़ इनहेरिटेंस को फ़ीड करते हैं, `new` एक्सप्रेशन इंस्टैंशिएशन गिने जाते हैं, और लगभग 273 स्टैंडर्ड-लाइब्रेरी नाम संबंधों से फ़िल्टर किए जाते हैं।

उपयोगी MCP एंट्री पॉइंट

  • find_symbol

    जब आपको परिभाषा और कॉलर चाहिए, तो `OrderBook::match` जैसे पूरी तरह क्वालिफ़ाइड नाम के साथ इस्तेमाल करें।

  • dependency_search

    सिग्नेचर बदलने से पहले ओवरराइड और कॉलर ढूँढने के लिए किसी बेस क्लास या वर्चुअल मेथड पर इस्तेमाल करें।

  • get_task_context

    "समझाओ कि मार्केट-डेटा संदेश स्ट्रैटेजी इंजन तक कैसे पहुँचता है" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।

संबंधित गाइड

रिपॉज़िटरी के संबंधित हिस्से

सभी गाइड ब्राउज़ करें