Vai al contenuto
cd /languages
  • Nativo su larga scala
  • Programmazione
  • Supporto AST e simboli

C++ in Maguyva: grafi di classi e chiamate per grandi basi di codice

Maguyva supporta C++ con AST, simboli e grafo, così gli agenti IA seguono classi, namespace, override virtuali e chiamanti in grandi basi di codice C++.

Perché C++ richiede struttura, non ricerca testuale

In C++ i nomi non sono unici. send può essere una funzione libera, un membro di tre classi e un override in una quarta. Namespace, template e definizioni fuori dalla classe come Socket::send in un file .cpp distribuiscono un tipo su molti file. La ricerca testuale restituisce ogni corrispondenza, ma non dice a un agente quale raggiunge una chiamata.

Maguyva indicizza classi, membri e chiamate insieme ai loro proprietari, così un agente segue la struttura reale prima di modificare.

Cosa estrae Maguyva in C++

Maguyva copre le estensioni più comuni di sorgenti e header C++, tra cui .cpp, .cc, .cxx, .hpp, .hh e .hxx. Vengono estratti classi, struct e funzioni, e una definizione fuori dalla classe come void Socket::send() viene attribuita alla classe e al namespace proprietari. I membri virtuali vengono registrati, e i parametri dei template fanno parte delle firme.

La tipizzazione dei receiver segue parametri, dichiarazioni locali, campi, cicli for basati su intervallo e auto, e guarda attraverso unique_ptr, shared_ptr e optional, così una chiamata come conn->send() può essere risolta nella classe giusta. Le clausole di classe base alimentano l’ereditarietà, e le espressioni new contano come istanziazione.

Si applica lo stesso mascheramento delle macro di export e annotazione di C. Circa 273 nomi della libreria standard (std::cout, std::endl, printf e simili) vengono filtrati dalle relazioni. Il grafo registra chiamate, include, ereditarietà, override, istanziazione, riferimenti di tipo, letture e scritture, e archi throw.

Esempi di prompt per agenti

  • “Quali classi ridefiniscono Renderer::draw e chi lo chiama?” (dependency_search)
  • “Mostrami OrderBook::match e tutti i chiamanti.” (find_symbol)
  • “Spiega come un messaggio di dati di mercato raggiunge il motore di strategia.” (get_task_context)

Limiti noti

  • .h compare negli elenchi di estensioni di C, C++ e Objective-C, quindi negli alberi misti C e C++ gli header sono condivisi tra questi profili.
  • I corpi delle macro di tipo oggetto non vengono analizzati, e le chiamate ai nomi filtrati della libreria standard non sono archi del grafo. Usa text_pattern_search per le macro e gli usi di std::.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto nella pagina di compatibilità. Se parte dell’albero è in C puro, leggi anche la guida a C.

Il più adatto per

  • > Motori di gioco, sistemi di trading, browser e altre grandi basi di codice C++ in cui cambiare un header ricompila mezzo albero.
  • > Gerarchie di classi con metodi virtuali, in cui il metodo eseguito è definito altrove rispetto al punto di chiamata.
  • > Refactoring assistiti da agenti che hanno bisogno di chiamanti e override prima di un cambio di firma.

Workflow degli agenti

  • > Trovare tutti gli override di un metodo virtuale prima di modificare la classe base.
  • > Elencare in tutta la base di codice i chiamanti di una funzione o di un metodo di classe con namespace, come `net::Socket::send`.
  • > Tracciare dove una classe viene costruita con `new` e quali membri tocca dopo.

Dettagli del motore

  • > Le definizioni fuori dalla classe come `void Socket::send()` vengono attribuite alla classe e al namespace proprietari, e i membri virtuali vengono registrati.
  • > La tipizzazione dei receiver segue parametri, variabili locali, campi, `for` basati su intervallo e `auto`, e guarda attraverso `unique_ptr`, `shared_ptr` e `optional`.
  • > Le clausole di classe base alimentano l'ereditarietà, le espressioni `new` contano come istanziazione, e circa 273 nomi della libreria standard vengono filtrati dalle relazioni.

Punti di ingresso MCP utili

  • find_symbol

    Usalo con un nome qualificato come `OrderBook::match` quando ti servono definizione e chiamanti.

  • dependency_search

    Usalo su una classe base o un metodo virtuale per trovare override e chiamanti prima di un cambio di firma.

  • get_task_context

    Usalo per prompt come "spiega come un messaggio di dati di mercato raggiunge il motore di strategia".