Zum Inhalt springen
cd /languages
  • Native Großprojekte
  • Programmierung
  • AST- und Symbol-Support

C++ in Maguyva: Klassen- und Aufrufgraphen für große Codebasen

Maguyva unterstützt C++ mit AST, Symbolen und Graph, damit KI-Agenten Klassen, Namespaces, virtuelle Overrides und Aufrufer in großen C++-Codebasen verfolgen.

Warum C++ Struktur braucht statt Textsuche

In C++ sind Namen nicht eindeutig. send kann eine freie Funktion sein, ein Member von drei Klassen und ein Override in einer vierten. Namespaces, Templates und Definitionen außerhalb der Klasse wie Socket::send in einer .cpp-Datei verteilen einen Typ auf viele Dateien. Die Textsuche liefert jeden Treffer, sagt einem Agenten aber nicht, welchen davon ein Aufruf erreicht.

Maguyva indexiert Klassen, Member und Aufrufe samt ihren Besitzern, damit ein Agent der echten Struktur folgen kann, bevor er etwas ändert.

Was Maguyva in C++ extrahiert

Maguyva deckt die gängigen C++-Endungen für Quell- und Header-Dateien ab, darunter .cpp, .cc, .cxx, .hpp, .hh und .hxx. Klassen, Structs und Funktionen werden extrahiert, und eine Definition außerhalb der Klasse wie void Socket::send() wird ihrer besitzenden Klasse und ihrem Namespace zugeordnet. Virtuelle Member werden erfasst, und Template-Parameter sind Teil der Signaturen.

Die Receiver-Typisierung folgt Parametern, lokalen Deklarationen, Feldern, bereichsbasierten for-Schleifen und auto und blickt durch unique_ptr, shared_ptr und optional hindurch, sodass ein Aufruf wie conn->send() zur richtigen Klasse aufgelöst werden kann. Basisklassen-Klauseln speisen die Vererbung, und new-Ausdrücke zählen als Instanziierung.

Es gilt dieselbe Maskierung von Export- und Annotationsmakros wie bei C. Etwa 273 Namen der Standardbibliothek (std::cout, std::endl, printf und ähnliche) werden aus den Beziehungen gefiltert. Der Graph erfasst Aufrufe, Includes, Vererbung, Overrides, Instanziierung, Typreferenzen, Lese- und Schreibzugriffe sowie throw-Kanten.

Beispiel-Prompts für Agenten

  • „Welche Klassen überschreiben Renderer::draw, und wer ruft es auf?“ (dependency_search)
  • „Zeige mir OrderBook::match und jeden Aufrufer.“ (find_symbol)
  • „Erkläre, wie eine Marktdatennachricht die Strategie-Engine erreicht.“ (get_task_context)

Bekannte Grenzen

  • .h steht in den Listen der Dateiendungen von C, C++ und Objective-C, daher teilen sich diese Profile Header in gemischten C- und C++-Bäumen.
  • Rümpfe objektartiger Makros werden nicht geparst, und Aufrufe gefilterter Namen der Standardbibliothek sind keine Graphkanten. Verwende text_pattern_search für Makros und die Nutzung von std::.

Nächste Schritte

Verbinde ein Repository über den Schnellstart und prüfe dann die Unterstützungsmatrix auf der Kompatibilitätsseite. Wenn Teile des Baums reines C sind, lies auch den C-Leitfaden.

Am besten geeignet

  • > Game-Engines, Handelssysteme, Browser und andere große C++-Codebasen, in denen eine Header-Änderung den halben Baum neu baut.
  • > Klassenhierarchien mit virtuellen Methoden, bei denen die ausgeführte Methode an anderer Stelle definiert ist als dort, wo sie aufgerufen wird.
  • > Agentengestütztes Refactoring, das vor einer Signaturänderung Aufrufer und Overrides kennen muss.

Agentenabläufe

  • > Jeden Override einer virtuellen Methode finden, bevor sich die Basisklasse ändert.
  • > Aufrufer einer Funktion oder Klassenmethode mit Namespace wie `net::Socket::send` in der gesamten Codebasis auflisten.
  • > Nachverfolgen, wo eine Klasse mit `new` erzeugt wird und welche Member sie danach berührt.

Engine-Einordnung

  • > Definitionen außerhalb der Klasse wie `void Socket::send()` werden ihrer besitzenden Klasse und ihrem Namespace zugeordnet, und virtuelle Member werden erfasst.
  • > Die Receiver-Typisierung folgt Parametern, lokalen Variablen, Feldern, bereichsbasiertem `for` und `auto` und blickt durch `unique_ptr`, `shared_ptr` und `optional` hindurch.
  • > Basisklassen-Klauseln speisen die Vererbung, `new`-Ausdrücke zählen als Instanziierung, und etwa 273 Namen der Standardbibliothek werden aus den Beziehungen gefiltert.

Nützliche MCP-Einstiegspunkte

  • find_symbol

    Nutz es für einen qualifizierten Namen wie `OrderBook::match`, wenn du Definition und Aufrufer brauchst.

  • dependency_search

    Nutz es vor einer Signaturänderung auf einer Basisklasse oder virtuellen Methode, um Overrides und Aufrufer zu finden.

  • get_task_context

    Nutz es für Prompts wie „erkläre, wie eine Marktdatennachricht die Strategie-Engine erreicht“.