Hopp til innhold
cd /languages
  • Vitenskapelig arv
  • Programmering
  • AST- og symbolstøtte

Fortran i Maguyva: kodegrafer for vitenskapelige kodebaser

Maguyva støtter Fortran med AST, symboler og graf, slik at AI-agenter kan følge subrutiner, moduler og avledede typer før de endrer numerisk kode.

Hvorfor Fortran trenger struktur, ikke strengmatching

Fortran-kodebaser er ofte gamle, store og skrevet av fageksperter heller enn programvareteam. Rutiner som heter SOLVE, Solve og solve er samme rutine. Moduler deles av hundrevis av filer, og biblioteket av innebygde prosedyrer er så stort at en naiv kalliste for det meste består av SQRT, SUM og WRITE.

En agent som bare greper, drukner i den støyen. Maguyva gir den strukturen først: hvilke programenheter som finnes, hvilke moduler de bruker, og hvilke egne rutiner som kaller hverandre.

Hva Maguyva henter ut i Fortran

Maguyva dekker kildekode i fast og fritt format (.f, .for, .ftn, .f90, .f95, .f03, .f08). Funksjoner og subrutiner hentes ut som kallbare symboler, og avledede typer kan velges som typedefinisjoner i strukturelt søk.

Symbolmatchingen skiller ikke mellom store og små bokstaver, akkurat som Fortran selv. Importrelasjoner kommer fra use og include; nøkkelordet fjernes slik at grafen lagrer modulnavnet. Kall, lesinger, tilordninger, typereferanser og arv fra utvidede avledede typer er også med i grafen.

Relasjonsfilteret fjerner rundt 165 innebygde prosedyrer (I/O-setninger og rutiner for matematikk, tabeller, strenger, typekonvertering og bitoperasjoner), slik at kantene som gjenstår peker på din egen kode.

Eksempler på prompter for agenter

  • «Hvilke subrutiner kaller compute_flux, og hvilke moduler bruker de?» (find_symbol, deretter dependency_search incoming)
  • «Spor hvordan randbetingelser brukes i løserens løkke.» (get_task_context)
  • «Finn alle programenheter som bruker modulen constants.» (text_pattern_search etter use constants, deretter find_symbol)

Kjente begrensninger

  • Fortran har verken dekoratorer eller unntakshåndtering, så disse relasjonstypene er merket som ikke aktuelle.
  • Typebundne prosedyrer deler de samme nodene som vanlige funksjoner og subrutiner. Bruk forhåndsinnstillingen functions i structural_search; forhåndsinnstillingen methods velger ingen Fortran-noder.
  • Kall til filtrerte innebygde prosedyrer vises ikke som kanter i grafen. Bruk text_pattern_search når du trenger hver WRITE eller OPEN.

Neste steg

Koble til et repositorium med hurtigstarten, og se deretter hele støttematrisen på kompatibilitetssiden. Hvis Fortran-koden din ligger ved siden av limkode i C, bør du også lese veiledningen for C.

Best egnet

  • > Forsknings-, ingeniør- og HPC-team som vedlikeholder Fortran-løsere, simuleringer eller numeriske biblioteker som er eldre enn dagens team.
  • > Repositorier der `.f`-filer i fast format ligger ved siden av `.f90` og nyere moduler i fritt format, ofte sammen med wrappere i C eller Python.
  • > Agentstøttede gjennomganger der første steg er å finne ut hvilke subrutiner som berører en delt modul før numerikken endres.

Agent-arbeidsflyter

  • > Spore hvilke subrutiner og funksjoner som kaller en løserrutine før argumentene eller enhetene endres.
  • > Liste modulene en programenhet henter inn med `use`, og følge dem til definisjonene.
  • > Finne hvor en avledet type er deklarert, og hvilke prosedyrer som jobber med den.

Motordetaljer

  • > Fortran-støtten dekker kildekode i fast og fritt format: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` og `.f08`.
  • > Funksjoner og subrutiner er kallbare symboler, symbolmatchingen skiller ikke mellom store og små bokstaver, og `use` og `include` blir importrelasjoner.
  • > Rundt 165 innebygde prosedyrer (rutiner for I/O, matematikk, tabeller, strenger, typekonvertering og biter) filtreres ut av relasjonene. Dekorator- og unntaksrelasjoner er merket som ikke aktuelle.

Nyttige MCP-inngangspunkter

  • find_symbol

    Start med navnet på subrutinen, funksjonen eller modulen; matchingen ignorerer store og små bokstaver, akkurat som Fortran.

  • dependency_search

    Bruk incoming-traversering på en løser- eller delt modulrutine for å se alle kallere før en numerisk endring.

  • get_task_context

    Bruk det til prompter som «spor hvordan randbetingelser brukes i løserens løkke».