Saltar al contenido
cd /languages
  • Nativo a gran escala
  • Programación
  • Soporte de AST y símbolos

C++ en Maguyva: grafos de clases y llamadas para bases de código grandes

Maguyva admite C++ con AST, símbolos y grafo, para que los agentes de IA sigan clases, namespaces, sobrescrituras virtuales y llamadores en grandes bases de código C++.

Por qué C++ necesita estructura y no búsqueda de texto

En C++ los nombres no son únicos. send puede ser una función libre, un miembro de tres clases y una sobrescritura en una cuarta. Los namespaces, las plantillas y las definiciones fuera de la clase, como Socket::send en un archivo .cpp, reparten un tipo en muchos archivos. La búsqueda de texto devuelve todas las coincidencias, pero no le dice a un agente a cuál llega una llamada.

Maguyva indexa clases, miembros y llamadas con sus propietarios, para que un agente siga la estructura real antes de editar.

Qué extrae Maguyva en C++

Maguyva cubre las extensiones habituales de fuentes y headers de C++, entre ellas .cpp, .cc, .cxx, .hpp, .hh y .hxx. Se extraen clases, structs y funciones, y una definición fuera de la clase como void Socket::send() se atribuye a su clase y namespace propietarios. Se registran los miembros virtuales, y los parámetros de plantilla forman parte de las firmas.

La tipificación de receptores sigue parámetros, declaraciones locales, campos, bucles for basados en rango y auto, y mira a través de unique_ptr, shared_ptr y optional, así que una llamada como conn->send() puede resolverse a la clase correcta. Las cláusulas de clase base alimentan la herencia, y las expresiones new cuentan como instanciación.

Se aplica el mismo enmascaramiento de macros de exportación y anotación que en C. Unos 273 nombres de la biblioteca estándar (std::cout, std::endl, printf y similares) se filtran de las relaciones. El grafo registra llamadas, includes, herencia, sobrescrituras, instanciación, referencias de tipo, lecturas y escrituras, y aristas de throw.

Ejemplos de prompts para agentes

  • “¿Qué clases sobrescriben Renderer::draw y quién lo llama?” (dependency_search)
  • “Muéstrame OrderBook::match y todos sus llamadores.” (find_symbol)
  • “Explica cómo llega un mensaje de datos de mercado al motor de estrategias.” (get_task_context)

Limitaciones conocidas

  • .h aparece en las listas de extensiones de C, C++ y Objective-C, por lo que en árboles que mezclan C y C++ los headers se comparten entre esos perfiles.
  • Los cuerpos de las macros tipo objeto no se analizan, y las llamadas a nombres filtrados de la biblioteca estándar no son aristas del grafo. Usa text_pattern_search para macros y usos de std::.

Próximos pasos

Conecta un repositorio con el inicio rápido y luego revisa la matriz de compatibilidad en la página de compatibilidad. Si parte del árbol es C puro, lee también la guía de C.

Mejor uso

  • > Motores de juegos, sistemas de trading, navegadores y otras grandes bases de código C++ donde cambiar un header recompila medio árbol.
  • > Jerarquías de clases con métodos virtuales, donde el método que se ejecuta está definido en un lugar distinto de donde se llama.
  • > Refactorizaciones asistidas por agentes que necesitan conocer llamadores y sobrescrituras antes de un cambio de firma.

Flujos de trabajo del agente

  • > Encontrar todas las sobrescrituras de un método virtual antes de cambiar la clase base.
  • > Listar en toda la base de código los llamadores de una función o método de clase con namespace, como `net::Socket::send`.
  • > Rastrear dónde se construye una clase con `new` y qué miembros toca después.

Detalles del motor

  • > Las definiciones fuera de la clase como `void Socket::send()` se atribuyen a su clase y namespace propietarios, y se registran los miembros virtuales.
  • > La tipificación de receptores sigue parámetros, variables locales, campos, `for` basados en rango y `auto`, y mira a través de `unique_ptr`, `shared_ptr` y `optional`.
  • > Las cláusulas de clase base alimentan la herencia, las expresiones `new` cuentan como instanciación, y unos 273 nombres de la biblioteca estándar se filtran de las relaciones.

Puntos de entrada MCP útiles

  • find_symbol

    Úsalo con un nombre calificado como `OrderBook::match` cuando necesites la definición y los llamadores.

  • dependency_search

    Úsalo sobre una clase base o un método virtual para encontrar sobrescrituras y llamadores antes de un cambio de firma.

  • get_task_context

    Úsalo para prompts como "explica cómo llega un mensaje de datos de mercado al motor de estrategias".