Przejdź do treści
cd /languages
  • Naukowe dziedzictwo
  • Programowanie
  • Obsługa AST i symboli

Fortran w Maguyva: grafy kodu dla naukowych baz kodu

Maguyva obsługuje Fortran przez AST, symbole i graf, dzięki czemu agenci AI śledzą podprogramy, moduły i typy pochodne przed zmianą kodu numerycznego.

Dlaczego Fortran potrzebuje struktury, a nie dopasowywania tekstu

Bazy kodu w Fortranie są zwykle stare, duże i pisane przez ekspertów dziedzinowych, a nie zespoły programistyczne. Procedury o nazwach SOLVE, Solve i solve to ta sama procedura. Moduły są współdzielone przez setki plików, a biblioteka procedur wbudowanych jest tak duża, że naiwna lista wywołań składa się głównie z SQRT, SUM i WRITE.

Agent, który używa tylko grepa, tonie w tym szumie. Maguyva najpierw daje mu strukturę: jakie jednostki programu istnieją, jakich modułów używają i które własne procedury wywołują się nawzajem.

Co Maguyva wyodrębnia w Fortranie

Maguyva obejmuje kod źródłowy w formacie stałym i swobodnym (.f, .for, .ftn, .f90, .f95, .f03, .f08). Funkcje i podprogramy są wyodrębniane jako symbole wywoływalne, a typy pochodne można wybrać jako definicje typów w wyszukiwaniu strukturalnym.

Dopasowywanie symboli nie rozróżnia wielkości liter, tak jak sam Fortran. Relacje importu pochodzą z use i include; słowo kluczowe jest usuwane, więc graf przechowuje nazwę modułu. Wywołania, odczyty, przypisania, odwołania do typów i dziedziczenie z rozszerzonych typów pochodnych również są częścią grafu.

Filtr relacji pomija około 165 procedur wbudowanych (instrukcje wejścia/wyjścia oraz procedury matematyczne, tablicowe, tekstowe, konwersji typów i operacji na bitach), więc pozostałe krawędzie wskazują na Twój własny kod.

Przykładowe prompty dla agentów

  • „Które podprogramy wywołują compute_flux i jakich modułów używają?” (find_symbol, potem dependency_search incoming)
  • „Prześledź, jak warunki brzegowe są stosowane w pętli solwera.” (get_task_context)
  • „Znajdź wszystkie jednostki programu, które używają modułu constants.” (text_pattern_search dla use constants, potem find_symbol)

Znane ograniczenia

  • Fortran nie ma dekoratorów ani obsługi wyjątków, więc te typy relacji są oznaczone jako nie dotyczy.
  • Procedury związane z typem współdzielą te same węzły co zwykłe funkcje i podprogramy. Użyj presetu functions w structural_search; preset methods nie wybiera żadnych węzłów Fortranu.
  • Wywołania odfiltrowanych procedur wbudowanych nie pojawiają się jako krawędzie grafu. Gdy potrzebujesz każdego WRITE lub OPEN, użyj text_pattern_search.

Kolejne kroki

Podłącz repozytorium za pomocą szybkiego startu, a potem sprawdź pełną macierz obsługi na stronie zgodności. Jeśli Twój Fortran współistnieje z kodem łączącym w C, przeczytaj też przewodnik po C.

Najlepsze dopasowanie

  • > Zespoły badawcze, inżynierskie i HPC utrzymujące solwery, symulacje lub biblioteki numeryczne w Fortranie starsze niż obecny zespół.
  • > Repozytoria, w których pliki `.f` w formacie stałym sąsiadują z modułami `.f90` i nowszymi w formacie swobodnym, często obok wrapperów w C lub w języku Python.
  • > Przeglądy wspierane przez agentów, w których najpierw trzeba ustalić, które podprogramy dotykają współdzielonego modułu przed zmianą numeryki.

Workflow agentów

  • > Prześledzić, które podprogramy i funkcje wywołują procedurę solwera, zanim zmienią się jej argumenty lub jednostki.
  • > Wypisać moduły, które jednostka programu importuje przez `use`, i przejść do ich definicji.
  • > Znaleźć miejsce deklaracji typu pochodnego i procedury, które z niego korzystają.

Szczegóły silnika

  • > Obsługa Fortranu obejmuje kod źródłowy w formacie stałym i swobodnym: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` i `.f08`.
  • > Funkcje i podprogramy są symbolami wywoływalnymi, dopasowywanie symboli nie rozróżnia wielkości liter, a `use` i `include` stają się relacjami importu.
  • > Około 165 procedur wbudowanych (procedury wejścia/wyjścia, matematyczne, tablicowe, tekstowe, konwersji typów i bitowe) jest filtrowanych z relacji. Relacje dekoratorów i wyjątków są oznaczone jako nie dotyczy.

Przydatne punkty wejścia MCP

  • find_symbol

    Zacznij od nazwy podprogramu, funkcji lub modułu; dopasowanie ignoruje wielkość liter, tak jak Fortran.

  • dependency_search

    Użyj przejścia incoming na procedurze solwera lub współdzielonego modułu, aby przed zmianą numeryczną zobaczyć wszystkich wywołujących.

  • get_task_context

    Używaj go do promptów typu „prześledź, jak warunki brzegowe są stosowane w pętli solwera”.