Naar inhoud springen
cd /languages
  • Wetenschappelijke erfenis
  • Programmeren
  • AST- en symboolondersteuning

Fortran in Maguyva: codegrafen voor wetenschappelijke codebases

Maguyva ondersteunt Fortran met AST, symbolen en graaf, zodat AI-agents subroutines, modules en afgeleide types volgen voordat ze numerieke code wijzigen.

Waarom Fortran structuur nodig heeft in plaats van stringmatching

Fortran-codebases zijn vaak oud, groot en geschreven door domeinexperts in plaats van softwareteams. Routines met de namen SOLVE, Solve en solve zijn dezelfde routine. Modules worden door honderden bestanden gedeeld, en de bibliotheek met intrinsieke procedures is zo groot dat een naïeve aanroeplijst vooral uit SQRT, SUM en WRITE bestaat.

Een agent die alleen grept, verdrinkt in die ruis. Maguyva geeft hem eerst de structuur: welke programma-eenheden er zijn, welke modules ze gebruiken en welke eigen routines elkaar aanroepen.

Wat Maguyva in Fortran extraheert

Maguyva dekt broncode in vaste en vrije vorm (.f, .for, .ftn, .f90, .f95, .f03, .f08). Functies en subroutines worden geëxtraheerd als aanroepbare symbolen, en afgeleide types zijn in structureel zoeken te selecteren als typedefinities.

Het matchen van symbolen is hoofdletterongevoelig, net als Fortran zelf. Importrelaties komen uit use en include; het sleutelwoord wordt verwijderd, zodat de graaf de modulenaam opslaat. Aanroepen, leesacties, toewijzingen, typeverwijzingen en overerving van uitgebreide afgeleide types maken ook deel uit van de graaf.

Het relatiefilter verwijdert ongeveer 165 intrinsieke procedures (I/O-statements en routines voor wiskunde, arrays, strings, typeconversie en bitbewerking), zodat de overgebleven randen naar je eigen code wijzen.

Voorbeeldprompts voor agents

  • “Welke subroutines roepen compute_flux aan, en welke modules gebruiken ze?” (find_symbol, daarna dependency_search incoming)
  • “Volg hoe randvoorwaarden in de solverlus worden toegepast.” (get_task_context)
  • “Zoek elke programma-eenheid die de module constants gebruikt.” (text_pattern_search op use constants, daarna find_symbol)

Bekende beperkingen

  • Fortran kent geen decorators en geen exceptionafhandeling, dus die relatietypes zijn gemarkeerd als niet van toepassing.
  • Typegebonden procedures delen dezelfde nodes als gewone functies en subroutines. Gebruik de preset functions in structural_search; de preset methods selecteert geen Fortran-nodes.
  • Aanroepen van gefilterde intrinsieke procedures verschijnen niet als randen in de graaf. Gebruik text_pattern_search wanneer je elke WRITE of OPEN nodig hebt.

Volgende stappen

Koppel een repository via de snelstart en bekijk daarna de volledige ondersteuningsmatrix op de compatibiliteitspagina. Staat je Fortran naast C-lijmcode, lees dan ook de C-gids.

Beste toepassing

  • > Onderzoeks-, engineering- en HPC-teams die Fortran-solvers, simulaties of numerieke bibliotheken onderhouden die ouder zijn dan het huidige team.
  • > Repositories waarin `.f`-bestanden in vaste vorm naast `.f90`- en nieuwere modules in vrije vorm staan, vaak met C- of Python-wrappers ernaast.
  • > Door agents ondersteunde reviews waarbij je eerst wilt weten welke subroutines een gedeelde module raken voordat er een numerieke wijziging komt.

Agentworkflows

  • > Nagaan welke subroutines en functies een solverroutine aanroepen voordat de argumenten of eenheden veranderen.
  • > De modules opsommen die een programma-eenheid met `use` binnenhaalt en doorlopen naar hun definities.
  • > Vinden waar een afgeleid type is gedeclareerd en welke procedures ermee werken.

Enginedetails

  • > Fortran-ondersteuning dekt broncode in vaste en vrije vorm: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` en `.f08`.
  • > Functies en subroutines zijn aanroepbare symbolen, het matchen van symbolen is hoofdletterongevoelig, en `use` en `include` worden importrelaties.
  • > Ongeveer 165 intrinsieke procedures (routines voor I/O, wiskunde, arrays, strings, typeconversie en bits) worden uit de relaties gefilterd. Decorator- en exceptionrelaties zijn gemarkeerd als niet van toepassing.

Nuttige MCP-instappunten

  • find_symbol

    Begin met de naam van de subroutine, functie of module; het matchen is hoofdletterongevoelig, net als Fortran.

  • dependency_search

    Gebruik incoming-traversal op een solver- of gedeelde moduleroutine om vóór een numerieke wijziging elke aanroeper te zien.

  • get_task_context

    Gebruik het voor prompts zoals "volg hoe randvoorwaarden in de solverlus worden toegepast".