Pular para o conteúdo
cd /languages
  • Nativo em grande escala
  • Programação
  • Suporte a AST e símbolos

C++ no Maguyva: grafos de classes e chamadas para grandes bases

O Maguyva oferece suporte a C++ com AST, símbolos e grafo, para que agentes de IA sigam classes, namespaces, sobrescritas virtuais e chamadores em grandes bases C++.

Por que C++ precisa de estrutura, e não de busca textual

Em C++, nomes não são únicos. send pode ser uma função livre, um membro de três classes e uma sobrescrita em uma quarta. Namespaces, templates e definições fora da classe, como Socket::send em um arquivo .cpp, espalham um tipo por muitos arquivos. A busca textual devolve todas as correspondências, mas não diz a um agente qual delas uma chamada alcança.

O Maguyva indexa classes, membros e chamadas com seus donos, para que um agente siga a estrutura real antes de editar.

O que o Maguyva extrai em C++

O Maguyva cobre as extensões comuns de fontes e headers C++, incluindo .cpp, .cc, .cxx, .hpp, .hh e .hxx. Classes, structs e funções são extraídas, e uma definição fora da classe como void Socket::send() é atribuída à classe e ao namespace donos. Membros virtuais são registrados, e parâmetros de template fazem parte das assinaturas.

A tipagem de receivers segue parâmetros, declarações locais, campos, loops for baseados em intervalo e auto, e enxerga através de unique_ptr, shared_ptr e optional, então uma chamada como conn->send() pode ser resolvida para a classe certa. Cláusulas de classe base alimentam a herança, e expressões new contam como instanciação.

Vale o mesmo mascaramento de macros de exportação e anotação do C. Cerca de 273 nomes da biblioteca padrão (std::cout, std::endl, printf e semelhantes) são filtrados das relações. O grafo registra chamadas, includes, herança, sobrescritas, instanciação, referências de tipo, leituras e escritas, e arestas de throw.

Exemplos de prompts para agentes

  • “Quais classes sobrescrevem Renderer::draw e quem o chama?” (dependency_search)
  • “Mostre OrderBook::match e todos os chamadores.” (find_symbol)
  • “Explique como uma mensagem de dados de mercado chega ao motor de estratégias.” (get_task_context)

Limitações conhecidas

  • .h aparece nas listas de extensões de C, C++ e Objective-C, então em árvores que misturam C e C++ os headers são compartilhados entre esses perfis.
  • Corpos de macros do tipo objeto não são analisados, e chamadas a nomes filtrados da biblioteca padrão não são arestas do grafo. Use text_pattern_search para macros e usos de std::.

Próximos passos

Conecte um repositório pelo início rápido e depois confira a matriz de suporte na página de compatibilidade. Se parte da árvore é C puro, leia também o guia de C.

Uso ideal

  • > Engines de jogos, sistemas de trading, navegadores e outras grandes bases C++ em que mudar um header recompila metade da árvore.
  • > Hierarquias de classes com métodos virtuais, em que o método executado é definido em outro lugar que não o da chamada.
  • > Refatorações assistidas por agentes que precisam de chamadores e sobrescritas antes de uma mudança de assinatura.

Fluxos de trabalho de agente

  • > Encontrar todas as sobrescritas de um método virtual antes de mudar a classe base.
  • > Listar na base de código inteira os chamadores de uma função ou método de classe com namespace, como `net::Socket::send`.
  • > Rastrear onde uma classe é construída com `new` e quais membros ela toca em seguida.

Detalhes do motor

  • > Definições fora da classe como `void Socket::send()` são atribuídas à classe e ao namespace donos, e membros virtuais são registrados.
  • > A tipagem de receivers segue parâmetros, variáveis locais, campos, `for` baseado em intervalo e `auto`, e enxerga através de `unique_ptr`, `shared_ptr` e `optional`.
  • > Cláusulas de classe base alimentam a herança, expressões `new` contam como instanciação, e cerca de 273 nomes da biblioteca padrão são filtrados das relações.

Pontos de entrada MCP úteis

  • find_symbol

    Use com um nome qualificado como `OrderBook::match` quando precisar da definição e dos chamadores.

  • dependency_search

    Use em uma classe base ou método virtual para encontrar sobrescritas e chamadores antes de uma mudança de assinatura.

  • get_task_context

    Use para prompts como "explique como uma mensagem de dados de mercado chega ao motor de estratégias".