Přeskočit na obsah
cd /languages
  • Nativní kód ve velkém
  • Programování
  • Podpora AST a symbolů

C++ v Maguyva: grafy tříd a volání pro velké kódové základny

Maguyva podporuje C++ s AST, symboly a grafem, takže AI agenti sledují třídy, jmenné prostory, virtuální přepisy a volající ve velkých kódových základnách C++.

Proč C++ potřebuje strukturu, ne textové vyhledávání

V C++ nejsou názvy jedinečné. send může být volná funkce, člen tří tříd a přepis ve čtvrté. Jmenné prostory, šablony a definice mimo třídu, jako Socket::send v souboru .cpp, rozdělují jeden typ do mnoha souborů. Textové vyhledávání vrátí každou shodu, ale agentovi neřekne, ke které z nich volání dojde.

Maguyva indexuje třídy, členy a volání i s jejich vlastníky, aby agent mohl před úpravou sledovat skutečnou strukturu.

Co Maguyva v C++ extrahuje

Maguyva pokrývá běžné přípony zdrojových a hlavičkových souborů C++, mimo jiné .cpp, .cc, .cxx, .hpp, .hh a .hxx. Extrahují se třídy, struktury a funkce a definice mimo třídu, jako void Socket::send(), se přiřadí vlastnické třídě a jmennému prostoru. Virtuální členy se zaznamenávají a parametry šablon jsou součástí signatur.

Typování příjemců sleduje parametry, lokální deklarace, položky, cykly for přes rozsah a auto a vidí skrz unique_ptr, shared_ptr a optional, takže volání jako conn->send() lze vyřešit na správnou třídu. Klauzule základních tříd napájejí dědičnost a výrazy new se počítají jako vytvoření instance.

Platí stejné maskování exportních a anotačních maker jako u C. Přibližně 273 názvů standardní knihovny (std::cout, std::endl, printf a podobné) se z vazeb odfiltruje. Graf zaznamenává volání, include, dědičnost, přepisy, vytváření instancí, odkazy na typy, čtení a zápisy a hrany throw.

Ukázkové prompty pro agenty

  • „Které třídy přepisují Renderer::draw a kdo ji volá?“ (dependency_search)
  • „Ukaž mi OrderBook::match a všechny volající.“ (find_symbol)
  • „Vysvětli, jak se zpráva s tržními daty dostane do strategického enginu.“ (get_task_context)

Známá omezení

  • .h je v seznamech přípon C, C++ i Objective-C, takže ve stromech s C i C++ hlavičky tyto profily sdílejí.
  • Těla objektových maker se neparsují a volání odfiltrovaných názvů standardní knihovny nejsou hranami grafu. Pro makra a použití std:: použijte text_pattern_search.

Další kroky

Připojte repozitář podle rychlého startu a pak si prohlédněte matici podpory na stránce kompatibility. Pokud je část stromu v čistém C, přečtěte si i průvodce jazykem C.

Nejlépe se hodí pro

  • > Herní enginy, obchodní systémy, prohlížeče a další velké kódové základny v C++, kde změna jedné hlavičky přestaví půl stromu.
  • > Hierarchie tříd s virtuálními metodami, kde je spouštěná metoda definovaná jinde, než kde se volá.
  • > Refaktoring s podporou agentů, který před změnou signatury potřebuje volající a přepisy.

Workflow agentů

  • > Najít všechny přepisy virtuální metody, než se změní základní třída.
  • > Vypsat v celé kódové základně volající funkce nebo metody třídy ve jmenném prostoru, například `net::Socket::send`.
  • > Dohledat, kde se třída vytváří přes `new` a kterých členů se pak dotkne.

Podrobnosti enginu

  • > Definice mimo třídu, jako `void Socket::send()`, se přiřazují vlastnické třídě a jmennému prostoru a virtuální členy se zaznamenávají.
  • > Typování příjemců sleduje parametry, lokální proměnné, položky, `for` přes rozsah a `auto` a vidí skrz `unique_ptr`, `shared_ptr` a `optional`.
  • > Klauzule základních tříd napájejí dědičnost, výrazy `new` se počítají jako vytvoření instance a přibližně 273 názvů standardní knihovny se z vazeb odfiltruje.

Užitečné vstupní body MCP

  • find_symbol

    Použijte s kvalifikovaným názvem jako `OrderBook::match`, když potřebujete definici a volající.

  • dependency_search

    Před změnou signatury použijte na základní třídě nebo virtuální metodě a najdete přepisy i volající.

  • get_task_context

    Použijte pro prompty typu „vysvětli, jak se zpráva s tržními daty dostane do strategického enginu“.