تخطَّ إلى المحتوى
cd /languages
  • شيفرة أصلية على نطاق واسع
  • البرمجة
  • دعم AST والرموز

لغة C++ في Maguyva: رسوم بيانية للفئات والاستدعاءات في قواعد الشيفرة الكبيرة

يدعم Maguyva لغة C++ بشجرة AST والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الفئات ونطاقات الأسماء والتجاوزات الافتراضية والمستدعين في قواعد شيفرة C++ الكبيرة.

لماذا تحتاج C++ إلى البنية لا إلى البحث النصي

الأسماء في C++ ليست فريدة. قد يكون send دالة حرة، وعضوًا في ثلاث فئات، وتجاوزًا في فئة رابعة. وتقسّم نطاقات الأسماء والقوالب والتعريفات خارج الفئة، مثل Socket::send في ملف .cpp، النوعَ الواحد على ملفات كثيرة. يُرجع البحث النصي كل تطابق، لكنه لا يخبر الوكيل بالتطابق الذي ينتهي إليه الاستدعاء.

يفهرس Maguyva الفئات والأعضاء والاستدعاءات مع مالكيها، فيتتبّع الوكيل البنية الحقيقية قبل أن يعدّل.

ما الذي يستخرجه Maguyva من C++

يغطي Maguyva امتدادات ملفات C++ المصدرية والترويسات الشائعة، ومنها .cpp و.cc و.cxx و.hpp و.hh و.hxx. تُستخرج الفئات والـ structs والدوال، ويُنسب التعريف خارج الفئة مثل void Socket::send() إلى الفئة المالكة ونطاق أسمائها. وتُسجَّل الأعضاء الافتراضية، وتكون معاملات القوالب جزءًا من التوقيعات.

يتتبّع تحديد نوع المستقبِل المعاملاتِ والتصريحاتِ المحلية والحقولَ وحلقات for القائمة على النطاق وauto، وينظر داخل unique_ptr وshared_ptr وoptional، فيُحَلّ استدعاء مثل conn->send() إلى الفئة الصحيحة. وتغذّي عبارات الفئات الأساسية الوراثةَ، وتُعدّ تعابير new إنشاءً لمثيلات.

يُطبَّق حجب وحدات ماكرو التصدير والتعليقات نفسه المطبَّق في C. ويُستبعد من العلاقات نحو 273 اسمًا من المكتبة القياسية (std::cout وstd::endl وprintf وما شابهها). ويسجّل الرسم البياني الاستدعاءات وعبارات include والوراثة والتجاوزات وإنشاء المثيلات ومراجع الأنواع والقراءات والكتابات وحواف throw.

أمثلة على مطالبات الوكلاء

  • “ما الفئات التي تتجاوز 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++ الكبيرة، حيث يعيد تغيير ترويسة واحدة بناء نصف الشجرة.
  • > هرميات الفئات ذات الأساليب الافتراضية، حيث يُعرَّف الأسلوب الذي يُنفَّذ في مكان غير مكان استدعائه.
  • > إعادة الهيكلة بمساعدة الوكلاء، التي تحتاج إلى المستدعين والتجاوزات قبل تغيير التوقيع.

سير عمل الوكلاء

  • > العثور على كل تجاوز لأسلوب افتراضي قبل تغيير الفئة الأساسية.
  • > سرد مستدعي دالة أو أسلوب فئة ضمن نطاق أسماء، مثل `net::Socket::send`، عبر قاعدة الشيفرة كلها.
  • > تتبّع موضع إنشاء فئة عبر `new` والأعضاء التي تمسّها بعد ذلك.

تفاصيل المحرك

  • > تُنسب التعريفات خارج الفئة مثل `void Socket::send()` إلى فئتها المالكة ونطاق أسمائها، وتُسجَّل الأعضاء الافتراضية.
  • > يتتبّع تحديد نوع المستقبِل المعاملاتِ والمتغيراتِ المحلية والحقولَ وحلقات `for` القائمة على النطاق و`auto`، وينظر داخل `unique_ptr` و`shared_ptr` و`optional`.
  • > تغذّي عبارات الفئات الأساسية الوراثةَ، وتُعدّ تعابير `new` إنشاءً لمثيلات، ويُستبعد من العلاقات نحو 273 اسمًا من المكتبة القياسية.

نقاط دخول مفيدة عبر MCP

  • find_symbol

    استخدمه مع اسم مؤهَّل بالكامل مثل `OrderBook::match` حين تحتاج إلى التعريف والمستدعين.

  • dependency_search

    قبل تغيير التوقيع، استخدمه على فئة أساسية أو أسلوب افتراضي للعثور على التجاوزات والمستدعين.

  • get_task_context

    استخدمه لمطالبات مثل «اشرح كيف تصل رسالة بيانات السوق إلى محرّك الاستراتيجية».