Spring til indhold
cd /languages
  • Videnskabelig arv
  • Programmering
  • AST- og symbolunderstøttelse

Fortran i Maguyva: kodegrafer til videnskabelige kodebaser

Maguyva understøtter Fortran med AST, symboler og graf, så AI-agenter kan følge subrutiner, moduler og afledte typer, før de ændrer numerisk kode.

Hvorfor Fortran har brug for struktur, ikke strengmatchning

Fortran-kodebaser er ofte gamle, store og skrevet af domæneeksperter frem for softwareteams. Rutiner med navnene SOLVE, Solve og solve er den samme rutine. Moduler deles af hundredvis af filer, og biblioteket af indbyggede procedurer er så stort, at en naiv kaldliste mest består af SQRT, SUM og WRITE.

En agent, der kun greper, drukner i den støj. Maguyva giver den strukturen først: hvilke programenheder der findes, hvilke moduler de bruger, og hvilke egne rutiner der kalder hinanden.

Hvad Maguyva udtrækker i Fortran

Maguyva dækker kildekode i fast og frit format (.f, .for, .ftn, .f90, .f95, .f03, .f08). Funktioner og subrutiner udtrækkes som kaldbare symboler, og afledte typer kan vælges som typedefinitioner i strukturel søgning.

Symbolmatchningen skelner ikke mellem store og små bogstaver, ligesom Fortran selv. Importrelationer kommer fra use og include; nøgleordet fjernes, så grafen gemmer modulnavnet. Kald, læsninger, tildelinger, typereferencer og nedarvning fra udvidede afledte typer indgår også i grafen.

Relationsfilteret fjerner omkring 165 indbyggede procedurer (I/O-sætninger samt rutiner til matematik, arrays, strenge, typekonvertering og bitoperationer), så de kanter, der er tilbage, peger på din egen kode.

Eksempler på prompts til agenter

  • “Hvilke subrutiner kalder compute_flux, og hvilke moduler bruger de?” (find_symbol, derefter dependency_search incoming)
  • “Spor, hvordan randbetingelser anvendes i solverens løkke.” (get_task_context)
  • “Find alle programenheder, der bruger modulet constants.” (text_pattern_search efter use constants, derefter find_symbol)

Kendte begrænsninger

  • Fortran har hverken dekoratorer eller undtagelseshåndtering, så de relationstyper er markeret som ikke relevante.
  • Typebundne procedurer deler de samme noder som almindelige funktioner og subrutiner. Brug forudindstillingen functions i structural_search; forudindstillingen methods vælger ingen Fortran-noder.
  • Kald til filtrerede indbyggede procedurer vises ikke som kanter i grafen. Brug text_pattern_search, når du har brug for hver WRITE eller OPEN.

Næste skridt

Tilslut et repository med hurtigstarten, og se derefter hele understøttelsesmatricen på kompatibilitetssiden. Hvis din Fortran ligger ved siden af limkode i C, så læs også guiden til C.

Bedst egnet til

  • > Forsknings-, ingeniør- og HPC-teams, der vedligeholder Fortran-solvere, simuleringer eller numeriske biblioteker, som er ældre end det nuværende team.
  • > Repositories, hvor `.f`-filer i fast format ligger ved siden af `.f90` og nyere moduler i frit format, ofte sammen med wrappers i C eller Python.
  • > Agentunderstøttede reviews, hvor første skridt er at finde ud af, hvilke subrutiner der berører et delt modul, før numerikken ændres.

Agent-arbejdsgange

  • > Spore, hvilke subrutiner og funktioner der kalder en solver-rutine, før dens argumenter eller enheder ændres.
  • > Liste de moduler, en programenhed henter ind med `use`, og følge dem til deres definitioner.
  • > Finde, hvor en afledt type er erklæret, og hvilke procedurer der arbejder med den.

Motordetaljer

  • > Fortran-understøttelsen dækker kildekode i fast og frit format: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` og `.f08`.
  • > Funktioner og subrutiner er kaldbare symboler, symbolmatchningen skelner ikke mellem store og små bogstaver, og `use` og `include` bliver til importrelationer.
  • > Omkring 165 indbyggede procedurer (rutiner til I/O, matematik, arrays, strenge, typekonvertering og bits) filtreres fra relationerne. Dekorator- og undtagelsesrelationer er markeret som ikke relevante.

Nyttige MCP-indgange

  • find_symbol

    Start med navnet på subrutinen, funktionen eller modulet; matchningen ignorerer store og små bogstaver, ligesom Fortran.

  • dependency_search

    Brug incoming-gennemløb på en solver- eller delt modulrutine for at se alle kaldere før en numerisk ændring.

  • get_task_context

    Brug det til prompts som "spor, hvordan randbetingelser anvendes i solverens løkke".