Spring til indhold
cd /languages
  • Native i stor skala
  • Programmering
  • AST- og symbolunderstøttelse

C++ i Maguyva: klasse- og kaldgrafer til store kodebaser

Maguyva understøtter C++ med AST, symboler og graf, så AI-agenter kan følge klasser, navnerum, virtuelle overskrivninger og kaldere i store C++-kodebaser.

Hvorfor C++ kræver struktur, ikke tekstsøgning

I C++ er navne ikke unikke. send kan være en fri funktion, et medlem af tre klasser og en overskrivning i en fjerde. Navnerum, templates og definitioner uden for klassen, som Socket::send i en .cpp-fil, spreder én type over mange filer. Tekstsøgning returnerer hvert match, men fortæller ikke en agent, hvilket af dem et kald rammer.

Maguyva indekserer klasser, medlemmer og kald sammen med deres ejere, så en agent kan følge den reelle struktur, før den redigerer.

Hvad Maguyva udtrækker i C++

Maguyva dækker de almindelige filendelser for C++-kildekode og headere, herunder .cpp, .cc, .cxx, .hpp, .hh og .hxx. Klasser, structs og funktioner udtrækkes, og en definition uden for klassen som void Socket::send() tilskrives sin ejerklasse og sit navnerum. Virtuelle medlemmer registreres, og templateparametre indgår i signaturerne.

Modtagertypningen følger parametre, lokale erklæringer, felter, intervalbaserede for-løkker og auto, og ser igennem unique_ptr, shared_ptr og optional, så et kald som conn->send() kan opløses til den rigtige klasse. Basisklasseklausuler fodrer nedarvningen, og new-udtryk tæller som instansiering.

Samme maskering af eksport- og annotationsmakroer som i C gælder. Omkring 273 navne i standardbiblioteket (std::cout, std::endl, printf og lignende) filtreres fra relationerne. Grafen registrerer kald, includes, nedarvning, overskrivninger, instansiering, typereferencer, læsninger og skrivninger samt throw-kanter.

Eksempler på prompts til agenter

  • “Hvilke klasser overskriver Renderer::draw, og hvem kalder den?” (dependency_search)
  • “Vis mig OrderBook::match og alle, der kalder den.” (find_symbol)
  • “Forklar, hvordan en markedsdatabesked når strategimotoren.” (get_task_context)

Kendte begrænsninger

  • .h står på listerne over filendelser for C, C++ og Objective-C, så i træer, der blander C og C++, deles headere mellem de profiler.
  • Kroppe i objektlignende makroer parses ikke, og kald til filtrerede navne i standardbiblioteket er ikke kanter i grafen. Brug text_pattern_search til makroer og brug af std::.

Næste skridt

Tilslut et repository med hurtigstarten, og se derefter understøttelsesmatricen på kompatibilitetssiden. Hvis dele af træet er ren C, så læs også guiden til C.

Bedst egnet til

  • > Spilmotorer, handelssystemer, browsere og andre store C++-kodebaser, hvor én ændret header bygger halvdelen af træet om.
  • > Klassehierarkier med virtuelle metoder, hvor den metode, der kører, er defineret et andet sted end der, hvor den kaldes.
  • > Agentunderstøttet refaktorering, der har brug for kaldere og overskrivninger før en signaturændring.

Agent-arbejdsgange

  • > Finde alle overskrivninger af en virtuel metode, før basisklassen ændres.
  • > Liste kaldere i hele kodebasen til en funktion eller klassemetode i et navnerum, for eksempel `net::Socket::send`.
  • > Spore, hvor en klasse oprettes med `new`, og hvilke medlemmer den berører bagefter.

Motordetaljer

  • > Definitioner uden for klassen som `void Socket::send()` tilskrives deres ejerklasse og navnerum, og virtuelle medlemmer registreres.
  • > Modtagertypningen følger parametre, lokale variabler, felter, intervalbaseret `for` og `auto`, og ser igennem `unique_ptr`, `shared_ptr` og `optional`.
  • > Basisklasseklausuler fodrer nedarvningen, `new`-udtryk tæller som instansiering, og omkring 273 navne i standardbiblioteket filtreres fra relationerne.

Nyttige MCP-indgange

  • find_symbol

    Brug det til et kvalificeret navn som `OrderBook::match`, når du har brug for definitionen og kalderne.

  • dependency_search

    Brug det på en basisklasse eller virtuel metode før en signaturændring for at finde overskrivninger og kaldere.

  • get_task_context

    Brug det til prompts som "forklar, hvordan en markedsdatabesked når strategimotoren".