Pular para o conteúdo
cd /languages
  • Legado científico
  • Programação
  • Suporte a AST e símbolos

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

O Maguyva oferece suporte a Fortran com AST, símbolos e grafo, para que agentes de IA rastreiem sub-rotinas, módulos e tipos derivados antes de mudar código numérico.

Por que Fortran precisa de estrutura, não de busca por strings

Bases de código em Fortran costumam ser antigas, grandes e escritas por especialistas do domínio, não por equipes de software. Rotinas chamadas SOLVE, Solve e solve são a mesma rotina. Os módulos são compartilhados por centenas de arquivos, e a biblioteca de procedimentos intrínsecos é tão grande que uma lista ingênua de chamadas acaba cheia de SQRT, SUM e WRITE.

Um agente que só usa grep se afoga nesse ruído. O Maguyva entrega primeiro a estrutura: quais unidades de programa existem, quais módulos elas usam e quais rotinas do próprio código chamam umas às outras.

O que o Maguyva extrai em Fortran

O Maguyva cobre código-fonte de formato fixo e livre (.f, .for, .ftn, .f90, .f95, .f03, .f08). Funções e sub-rotinas são extraídas como símbolos chamáveis, e tipos derivados podem ser selecionados como definições de tipo na busca estrutural.

A correspondência de símbolos não diferencia maiúsculas de minúsculas, assim como o próprio Fortran. As relações de importação vêm de use e include, e a palavra-chave é removida para que o grafo guarde o nome do módulo. Chamadas, leituras, atribuições, referências de tipo e a herança de tipos derivados estendidos também entram no grafo.

O filtro de relações descarta cerca de 165 procedimentos intrínsecos (instruções de E/S e rotinas matemáticas, de arrays, de strings, de conversão de tipos e de manipulação de bits), então as arestas que sobram apontam para o seu próprio código.

Exemplos de prompts para agentes

  • “Quais sub-rotinas chamam compute_flux e quais módulos elas usam?” (find_symbol, depois dependency_search incoming)
  • “Rastreie como as condições de contorno são aplicadas no loop do solver.” (get_task_context)
  • “Encontre todas as unidades de programa que usam o módulo constants.” (text_pattern_search por use constants, depois find_symbol)

Limitações conhecidas

  • Fortran não tem decorators nem tratamento de exceções, por isso esses tipos de relação estão marcados como não aplicáveis.
  • Procedimentos vinculados a tipos compartilham os mesmos nós que funções e sub-rotinas comuns. Use o preset functions em structural_search; o preset methods não seleciona nenhum nó de Fortran.
  • Chamadas a procedimentos intrínsecos filtrados não aparecem como arestas do grafo. Use text_pattern_search quando precisar de cada WRITE ou OPEN.

Próximos passos

Conecte um repositório pelo início rápido e depois confira a matriz de suporte completa na página de compatibilidade. Se o seu Fortran convive com código de ligação em C, leia também o guia de C.

Uso ideal

  • > Equipes de pesquisa, engenharia e HPC que mantêm solvers, simulações ou bibliotecas numéricas em Fortran mais antigos que a equipe atual.
  • > Repositórios que misturam arquivos `.f` de formato fixo com módulos `.f90` e posteriores de formato livre, muitas vezes ao lado de wrappers em C ou Python.
  • > Revisões assistidas por agentes em que o primeiro passo é mapear quais sub-rotinas tocam um módulo compartilhado antes de uma mudança numérica.

Fluxos de trabalho de agente

  • > Rastrear quais sub-rotinas e funções chamam uma rotina do solver antes de mudar seus argumentos ou unidades.
  • > Listar os módulos que uma unidade de programa importa com `use` e seguir até as definições.
  • > Encontrar onde um tipo derivado é declarado e quais procedimentos trabalham com ele.

Detalhes do motor

  • > O suporte a Fortran cobre código-fonte de formato fixo e livre: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` e `.f08`.
  • > Funções e sub-rotinas são símbolos chamáveis, a correspondência de símbolos não diferencia maiúsculas de minúsculas, e `use` e `include` viram relações de importação.
  • > Cerca de 165 procedimentos intrínsecos (rotinas de E/S, matemáticas, arrays, strings, conversão de tipos e bits) são filtrados das relações. Relações de decorator e de exceção estão marcadas como não aplicáveis.

Pontos de entrada MCP úteis

  • find_symbol

    Comece pelo nome da sub-rotina, função ou módulo; a correspondência ignora maiúsculas e minúsculas, como o Fortran.

  • dependency_search

    Use a travessia incoming em uma rotina do solver ou de um módulo compartilhado para ver cada chamador antes de uma mudança numérica.

  • get_task_context

    Use para prompts como "rastreie como as condições de contorno são aplicadas no loop do solver".