Saltar al contenido
cd /languages
  • Legado científico
  • Programación
  • Soporte de AST y símbolos

Fortran en Maguyva: grafos de código para bases de código científicas

Maguyva admite Fortran con AST, símbolos y grafo, para que los agentes de IA sigan subrutinas, módulos y tipos derivados antes de cambiar código numérico.

Por qué Fortran necesita estructura, no coincidencia de cadenas

Las bases de código en Fortran suelen ser antiguas, grandes y escritas por especialistas del dominio más que por equipos de software. Las rutinas llamadas SOLVE, Solve y solve son la misma rutina. Los módulos se comparten entre cientos de archivos, y la biblioteca de procedimientos intrínsecos es tan grande que una lista ingenua de llamadas se llena sobre todo de SQRT, SUM y WRITE.

Un agente que solo usa grep se ahoga en ese ruido. Maguyva le entrega primero la estructura: qué unidades de programa existen, qué módulos usan y qué rutinas propias se llaman entre sí.

Qué extrae Maguyva en Fortran

Maguyva cubre código fuente de formato fijo y libre (.f, .for, .ftn, .f90, .f95, .f03, .f08). Las funciones y subrutinas se extraen como símbolos invocables, y los tipos derivados se pueden seleccionar como definiciones de tipo en la búsqueda estructural.

La coincidencia de símbolos no distingue mayúsculas de minúsculas, igual que Fortran. Las relaciones de importación provienen de use e include, y se elimina la palabra clave para que el grafo guarde el nombre del módulo. Las llamadas, lecturas, asignaciones, referencias de tipo y la herencia de tipos derivados extendidos también forman parte del grafo.

El filtro de relaciones descarta unos 165 procedimientos intrínsecos (sentencias de E/S y rutinas matemáticas, de arreglos, de cadenas, de conversión de tipos y de manipulación de bits), así que las aristas restantes apuntan a tu propio código.

Ejemplos de prompts para agentes

  • “¿Qué subrutinas llaman a compute_flux y qué módulos usan?” (find_symbol y luego dependency_search incoming)
  • “Rastrea cómo se aplican las condiciones de contorno en el bucle del solver.” (get_task_context)
  • “Encuentra todas las unidades de programa que usan el módulo constants.” (text_pattern_search para use constants y luego find_symbol)

Limitaciones conocidas

  • Fortran no tiene decoradores ni manejo de excepciones, por lo que esos tipos de relación están marcados como no aplicables.
  • Los procedimientos ligados a tipos comparten los mismos nodos que las funciones y subrutinas comunes. Usa el preset functions en structural_search; el preset methods no selecciona ningún nodo de Fortran.
  • Las llamadas a procedimientos intrínsecos filtrados no aparecen como aristas del grafo. Usa text_pattern_search cuando necesites cada WRITE u OPEN.

Próximos pasos

Conecta un repositorio con el inicio rápido y luego revisa la matriz de compatibilidad completa en la página de compatibilidad. Si tu Fortran convive con código de enlace en C, lee también la guía de C.

Mejor uso

  • > Equipos de investigación, ingeniería y HPC que mantienen solvers, simulaciones o bibliotecas numéricas en Fortran más antiguos que el equipo actual.
  • > Repositorios que mezclan archivos `.f` de formato fijo con módulos `.f90` y posteriores de formato libre, a menudo junto a wrappers de C o Python.
  • > Revisiones asistidas por agentes en las que lo primero es saber qué subrutinas tocan un módulo compartido antes de un cambio numérico.

Flujos de trabajo del agente

  • > Rastrear qué subrutinas y funciones llaman a una rutina del solver antes de cambiar sus argumentos o unidades.
  • > Listar los módulos que una unidad de programa importa con `use` y seguirlos hasta sus definiciones.
  • > Encontrar dónde se declara un tipo derivado y qué procedimientos trabajan con él.

Detalles del motor

  • > La compatibilidad con Fortran cubre código fuente de formato fijo y libre: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` y `.f08`.
  • > Las funciones y subrutinas son símbolos invocables, la coincidencia de símbolos no distingue mayúsculas de minúsculas, y `use` e `include` se convierten en relaciones de importación.
  • > Unos 165 procedimientos intrínsecos (rutinas de E/S, matemáticas, arreglos, cadenas, conversión de tipos y bits) se filtran de las relaciones. Las relaciones de decorador y de excepción están marcadas como no aplicables.

Puntos de entrada MCP útiles

  • find_symbol

    Empieza por el nombre de la subrutina, función o módulo; la coincidencia no distingue mayúsculas, como Fortran.

  • dependency_search

    Usa el recorrido incoming sobre una rutina del solver o de un módulo compartido para ver cada llamador antes de un cambio numérico.

  • get_task_context

    Úsalo para prompts como "rastrea cómo se aplican las condiciones de contorno en el bucle del solver".