Zum Inhalt springen
cd /languages
  • Wissenschaftliches Erbe
  • Programmierung
  • AST- und Symbol-Support

Fortran in Maguyva: Code-Graphen für wissenschaftliche Codebasen

Maguyva unterstützt Fortran mit AST, Symbolen und Graph, damit KI-Agenten Subroutinen, Module und abgeleitete Typen nachverfolgen, bevor sie numerischen Code ändern.

Warum Fortran Struktur braucht statt String-Matching

Fortran-Codebasen sind meist alt, groß und von Fachleuten der jeweiligen Domäne geschrieben, nicht von Softwareteams. Routinen namens SOLVE, Solve und solve sind dieselbe Routine. Module werden von Hunderten Dateien gemeinsam genutzt, und die Bibliothek der intrinsischen Prozeduren ist so groß, dass eine naive Aufrufliste vor allem aus SQRT, SUM und WRITE besteht.

Ein Agent, der nur grept, geht in diesem Rauschen unter. Maguyva liefert ihm zuerst die Struktur: welche Programmeinheiten es gibt, welche Module sie nutzen und welche eigenen Routinen sich gegenseitig aufrufen.

Was Maguyva in Fortran extrahiert

Maguyva deckt Quelltext in festem und freiem Format ab (.f, .for, .ftn, .f90, .f95, .f03, .f08). Funktionen und Subroutinen werden als aufrufbare Symbole extrahiert, und abgeleitete Typen lassen sich in der Struktursuche als Typdefinitionen auswählen.

Der Symbolabgleich ignoriert Groß- und Kleinschreibung, genau wie Fortran selbst. Importbeziehungen entstehen aus use und include; das Schlüsselwort wird entfernt, sodass der Graph den Modulnamen speichert. Aufrufe, Lesezugriffe, Zuweisungen, Typreferenzen und Vererbung aus erweiterten abgeleiteten Typen sind ebenfalls Teil des Graphen.

Der Beziehungsfilter entfernt rund 165 intrinsische Prozeduren (I/O-Anweisungen sowie Mathematik-, Array-, String-, Typkonvertierungs- und Bitoperations-Routinen), sodass die verbleibenden Kanten auf deinen eigenen Code zeigen.

Beispiel-Prompts für Agenten

  • „Welche Subroutinen rufen compute_flux auf, und welche Module nutzen sie?“ (find_symbol, dann dependency_search incoming)
  • „Verfolge, wie Randbedingungen in der Solver-Schleife angewendet werden.“ (get_task_context)
  • „Finde jede Programmeinheit, die das Modul constants nutzt.“ (text_pattern_search nach use constants, dann find_symbol)

Bekannte Grenzen

  • Fortran hat weder Decorators noch Ausnahmebehandlung, daher sind diese Beziehungstypen als nicht anwendbar markiert.
  • Typgebundene Prozeduren teilen sich dieselben Knoten wie gewöhnliche Funktionen und Subroutinen. Nutze in structural_search das Preset functions; das Preset methods wählt keine Fortran-Knoten aus.
  • Aufrufe gefilterter intrinsischer Prozeduren erscheinen nicht als Graphkanten. Verwende text_pattern_search, wenn du jedes WRITE oder OPEN brauchst.

Nächste Schritte

Verbinde ein Repository über den Schnellstart und prüfe dann die vollständige Unterstützungsmatrix auf der Kompatibilitätsseite. Wenn Fortran neben C-Glue-Code liegt, lies auch den C-Leitfaden.

Am besten geeignet

  • > Forschungs-, Engineering- und HPC-Teams, die Fortran-Solver, Simulationen oder numerische Bibliotheken pflegen, die älter sind als das aktuelle Team.
  • > Repositories, in denen `.f`-Dateien in festem Format neben `.f90` und neueren Modulen in freiem Format liegen, oft zusammen mit C- oder Python-Wrappern.
  • > Agentengestützte Reviews, bei denen zuerst geklärt wird, welche Subroutinen ein gemeinsames Modul berühren, bevor sich die Numerik ändert.

Agentenabläufe

  • > Nachverfolgen, welche Subroutinen und Funktionen eine Solver-Routine aufrufen, bevor sich ihre Argumente oder Einheiten ändern.
  • > Die Module auflisten, die eine Programmeinheit per `use` einbindet, und zu ihren Definitionen springen.
  • > Finden, wo ein abgeleiteter Typ deklariert ist und welche Prozeduren damit arbeiten.

Engine-Einordnung

  • > Die Fortran-Unterstützung deckt Quelltext in festem und freiem Format ab: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` und `.f08`.
  • > Funktionen und Subroutinen sind aufrufbare Symbole, der Symbolabgleich ignoriert Groß- und Kleinschreibung, und `use` sowie `include` werden zu Importbeziehungen.
  • > Etwa 165 intrinsische Prozeduren (I/O-, Mathematik-, Array-, String-, Typkonvertierungs- und Bit-Routinen) werden aus den Beziehungen gefiltert. Dekorator- und Ausnahmebeziehungen sind als nicht anwendbar markiert.

Nützliche MCP-Einstiegspunkte

  • find_symbol

    Beginne mit dem Namen der Subroutine, der Funktion oder des Moduls; der Abgleich ignoriert wie Fortran die Groß- und Kleinschreibung.

  • dependency_search

    Nutz die eingehende Traversierung auf einer Solver- oder Modulroutine, um vor einer numerischen Änderung jeden Aufrufer zu sehen.

  • get_task_context

    Nutz es für Prompts wie „verfolge, wie Randbedingungen in der Solver-Schleife angewendet werden“.