Hoppa till innehåll
cd /languages
  • Vetenskapligt arv
  • Programmering
  • Stöd för AST och symboler

Fortran i Maguyva: kodgrafer för vetenskapliga kodbaser

Maguyva stöder Fortran med AST, symboler och graf, så att AI-agenter kan följa subrutiner, moduler och härledda typer innan de ändrar numerisk kod.

Varför Fortran behöver struktur, inte strängmatchning

Fortran-kodbaser är ofta gamla, stora och skrivna av domänexperter snarare än mjukvaruteam. Rutiner med namnen SOLVE, Solve och solve är samma rutin. Moduler delas av hundratals filer, och biblioteket med inbyggda procedurer är så stort att en naiv anropslista mest består av SQRT, SUM och WRITE.

En agent som bara greppar drunknar i det bruset. Maguyva ger den strukturen först: vilka programenheter som finns, vilka moduler de använder och vilka egna rutiner som anropar varandra.

Vad Maguyva extraherar i Fortran

Maguyva täcker källkod i fast och fritt format (.f, .for, .ftn, .f90, .f95, .f03, .f08). Funktioner och subrutiner extraheras som anropbara symboler, och härledda typer kan väljas som typdefinitioner i strukturell sökning.

Symbolmatchningen är skiftlägesokänslig, precis som Fortran självt. Importrelationer kommer från use och include; nyckelordet tas bort så att grafen lagrar modulnamnet. Anrop, läsningar, tilldelningar, typreferenser och arv från utökade härledda typer ingår också i grafen.

Relationsfiltret tar bort omkring 165 inbyggda procedurer (I/O-satser samt rutiner för matematik, arrayer, strängar, typkonvertering och bitoperationer), så att kanterna som blir kvar pekar på din egen kod.

Exempel på prompter för agenter

  • “Vilka subrutiner anropar compute_flux, och vilka moduler använder de?” (find_symbol, sedan dependency_search incoming)
  • “Spåra hur randvillkor tillämpas i lösarens loop.” (get_task_context)
  • “Hitta alla programenheter som använder modulen constants.” (text_pattern_search efter use constants, sedan find_symbol)

Kända begränsningar

  • Fortran har varken dekoratorer eller undantagshantering, så de relationstyperna är markerade som ej tillämpliga.
  • Typbundna procedurer delar samma noder som vanliga funktioner och subrutiner. Använd förinställningen functions i structural_search; förinställningen methods väljer inga Fortran-noder.
  • Anrop till filtrerade inbyggda procedurer visas inte som kanter i grafen. Använd text_pattern_search när du behöver varje WRITE eller OPEN.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan hela stödmatrisen på kompatibilitetssidan. Om din Fortran ligger bredvid limkod i C, läs även guiden för C.

Bäst lämpad för

  • > Forsknings-, ingenjörs- och HPC-team som underhåller lösare, simuleringar eller numeriska bibliotek i Fortran som är äldre än det nuvarande teamet.
  • > Repon där `.f`-filer i fast format ligger bredvid `.f90` och nyare moduler i fritt format, ofta tillsammans med wrappers i C eller Python.
  • > Agentstödda granskningar där första steget är att ta reda på vilka subrutiner som rör en delad modul innan numeriken ändras.

Agentarbetsflöden

  • > Spåra vilka subrutiner och funktioner som anropar en lösarrutin innan dess argument eller enheter ändras.
  • > Lista modulerna som en programenhet hämtar in med `use` och följa dem till deras definitioner.
  • > Hitta var en härledd typ deklareras och vilka procedurer som arbetar med den.

Motordetaljer

  • > Fortran-stödet täcker källkod i fast och fritt format: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` och `.f08`.
  • > Funktioner och subrutiner är anropbara symboler, symbolmatchningen är skiftlägesokänslig, och `use` och `include` blir importrelationer.
  • > Omkring 165 inbyggda procedurer (rutiner för I/O, matematik, arrayer, strängar, typkonvertering och bitar) filtreras bort ur relationerna. Dekorator- och undantagsrelationer är markerade som ej tillämpliga.

Användbara MCP-ingångar

  • find_symbol

    Börja med namnet på subrutinen, funktionen eller modulen; matchningen ignorerar skiftläge, precis som Fortran.

  • dependency_search

    Använd incoming-traversering på en lösar- eller delad modulrutin för att se alla anropare före en numerisk ändring.

  • get_task_context

    Använd det för prompter som "spåra hur randvillkor tillämpas i lösarens loop".