Vai al contenuto
cd /languages
  • Eredità scientifica
  • Programmazione
  • Supporto AST e simboli

Fortran in Maguyva: grafi del codice per basi di codice scientifiche

Maguyva supporta Fortran con AST, simboli e grafo, così gli agenti IA seguono subroutine, moduli e tipi derivati prima di modificare codice numerico.

Perché Fortran ha bisogno di struttura, non di confronto tra stringhe

Le basi di codice Fortran tendono a essere vecchie, grandi e scritte da esperti di dominio più che da team software. Le routine chiamate SOLVE, Solve e solve sono la stessa routine. I moduli sono condivisi da centinaia di file, e la libreria delle procedure intrinseche è così ampia che un elenco ingenuo di chiamate contiene soprattutto SQRT, SUM e WRITE.

Un agente che usa solo grep affoga in questo rumore. Maguyva gli fornisce prima la struttura: quali unità di programma esistono, quali moduli usano e quali routine del codice si chiamano a vicenda.

Cosa estrae Maguyva in Fortran

Maguyva copre sorgenti in formato fisso e libero (.f, .for, .ftn, .f90, .f95, .f03, .f08). Funzioni e subroutine vengono estratte come simboli invocabili, e i tipi derivati si possono selezionare come definizioni di tipo nella ricerca strutturale.

Il confronto dei simboli non distingue maiuscole e minuscole, come Fortran stesso. Le relazioni di import derivano da use e include, con la parola chiave rimossa così che il grafo memorizzi il nome del modulo. Chiamate, letture, assegnazioni, riferimenti di tipo ed ereditarietà dai tipi derivati estesi fanno anch’essi parte del grafo.

Il filtro delle relazioni scarta circa 165 procedure intrinseche (istruzioni di I/O e routine matematiche, di array, di stringhe, di conversione di tipo e di manipolazione dei bit), così gli archi rimasti puntano al tuo codice.

Esempi di prompt per agenti

  • “Quali subroutine chiamano compute_flux e quali moduli usano?” (find_symbol, poi dependency_search incoming)
  • “Traccia come vengono applicate le condizioni al contorno nel ciclo del solver.” (get_task_context)
  • “Trova tutte le unità di programma che usano il modulo constants.” (text_pattern_search su use constants, poi find_symbol)

Limiti noti

  • Fortran non ha decoratori né gestione delle eccezioni, quindi questi tipi di relazione sono contrassegnati come non applicabili.
  • Le procedure legate ai tipi condividono gli stessi nodi di funzioni e subroutine ordinarie. Usa il preset functions in structural_search; il preset methods non seleziona nodi Fortran.
  • Le chiamate alle procedure intrinseche filtrate non compaiono come archi del grafo. Usa text_pattern_search quando ti serve ogni WRITE o OPEN.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto completa nella pagina di compatibilità. Se il tuo Fortran convive con codice di collegamento in C, leggi anche la guida a C.

Il più adatto per

  • > Team di ricerca, ingegneria e HPC che mantengono solver, simulazioni o librerie numeriche Fortran più vecchi del team attuale.
  • > Repository che mescolano file `.f` in formato fisso con moduli `.f90` e successivi in formato libero, spesso accanto a wrapper C o Python.
  • > Revisioni assistite da agenti in cui il primo passo è capire quali subroutine toccano un modulo condiviso prima di una modifica numerica.

Workflow degli agenti

  • > Tracciare quali subroutine e funzioni chiamano una routine del solver prima di cambiarne argomenti o unità.
  • > Elencare i moduli che un'unità di programma importa con `use` e risalire alle loro definizioni.
  • > Trovare dove è dichiarato un tipo derivato e quali procedure lo usano.

Dettagli del motore

  • > Il supporto a Fortran copre sorgenti in formato fisso e libero: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` e `.f08`.
  • > Funzioni e subroutine sono simboli invocabili, il confronto dei simboli non distingue maiuscole e minuscole, e `use` e `include` diventano relazioni di import.
  • > Circa 165 procedure intrinseche (routine di I/O, matematiche, di array, di stringhe, di conversione di tipo e sui bit) vengono filtrate dalle relazioni. Le relazioni di decoratore e di eccezione sono contrassegnate come non applicabili.

Punti di ingresso MCP utili

  • find_symbol

    Parti dal nome della subroutine, della funzione o del modulo; il confronto ignora maiuscole e minuscole, come Fortran.

  • dependency_search

    Usa la navigazione incoming su una routine del solver o di un modulo condiviso per vedere ogni chiamante prima di una modifica numerica.

  • get_task_context

    Usalo per prompt come "traccia come vengono applicate le condizioni al contorno nel ciclo del solver".