# Fortran dalam Maguyva: graf kod untuk pangkalan kod saintifik

Canonical source: https://maguyva.ai/ms/languages/fortran

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva menyokong Fortran dengan AST, simbol dan graf, supaya ejen AI boleh menjejak subrutin, modul dan derived type sebelum mengubah kod berangka.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .f, .f03, .f08, .f90, .f95, .for, +1 lagi
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## Paling sesuai

- Pasukan penyelidikan, kejuruteraan dan HPC yang menyelenggara penyelesai, simulasi atau pustaka berangka Fortran yang lebih tua daripada pasukan semasa.
- Repositori yang fail `.f` format tetap wujud bersama modul `.f90` dan kod format bebas yang lebih baharu, selalunya di samping pembalut C atau Python.
- Semakan dibantu ejen, dengan langkah pertama mencari subrutin yang menyentuh modul kongsi sebelum logik berangka berubah.

## Aliran kerja ejen

- Mencari subrutin dan fungsi yang memanggil rutin penyelesai sebelum argumen atau unitnya berubah.
- Menyenaraikan modul yang diimport oleh unit program melalui `use` dan melompat ke definisinya.
- Mencari tempat derived type diisytiharkan dan prosedur yang menggunakannya.

## Mengapa Fortran memerlukan struktur, bukan padanan rentetan

Pangkalan kod Fortran biasanya lama dan besar, ditulis oleh pakar bidang dan bukan pasukan perisian. Rutin bernama `SOLVE`, `Solve` dan `solve` ialah rutin yang sama. Modul tersebar di ratusan fail, dan pustaka prosedur intrinsik begitu besar sehingga senarai panggilan yang naif kebanyakannya terdiri daripada `SQRT`, `SUM` dan `WRITE`.

Ejen yang hanya menggunakan grep akan tenggelam dalam hingar itu. Maguyva memberikan struktur kepadanya dahulu: unit program yang wujud, modul yang digunakan, dan rutin dalam kod anda sendiri yang saling memanggil.

## Apa yang diekstrak oleh Maguyva daripada Fortran

Maguyva meliputi sumber format tetap dan format bebas (`.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03`, `.f08`). Fungsi dan subrutin diekstrak sebagai simbol boleh panggil, dan derived type boleh dipilih sebagai definisi jenis dalam carian berstruktur.

Padanan simbol tidak sensitif huruf besar kecil, sama seperti Fortran sendiri. Hubungan import datang daripada pernyataan `use` dan `include`; kata kunci dibuang supaya graf menyimpan nama modul. Panggilan, bacaan, umpukan, rujukan jenis dan pewarisan daripada derived type yang dilanjutkan juga dimasukkan ke dalam graf.

Penapis hubungan membuang kira-kira 165 prosedur intrinsik (pernyataan I/O serta rutin matematik, tatasusunan, rentetan, penukaran jenis dan manipulasi bit), supaya tepi yang tinggal menunjuk kepada kod anda sendiri.

## Contoh gesaan ejen

- "Siapa yang memanggil `compute_flux`, dan modul apa yang mereka gunakan?" (`find_symbol`, kemudian `dependency_search` arah masuk)
- "Jejaki cara syarat sempadan digunakan dalam gelung penyelesai." (`get_task_context`)
- "Cari setiap unit program yang menggunakan modul `constants`." (`text_pattern_search` untuk `use constants`, kemudian `find_symbol`)

## Had yang diketahui

- Fortran tiada decorator dan tiada pengendalian pengecualian, jadi jenis hubungan tersebut ditanda sebagai tidak berkenaan.
- Prosedur terikat jenis berkongsi nod yang sama dengan fungsi dan subrutin biasa. Gunakan pratetap `functions` dalam `structural_search`; pratetap `methods` tidak memilih sebarang nod Fortran.
- Panggilan kepada intrinsik yang ditapis tidak muncul sebagai tepi graf. Gunakan `text_pattern_search` apabila anda memerlukan setiap `WRITE` atau `OPEN`.

## Langkah seterusnya

Sambungkan repositori dengan [panduan permulaan pantas](/ms/docs/quickstart), kemudian semak matriks sokongan penuh di [halaman keserasian](/ms/docs/compatibility). Jika Fortran anda wujud bersama kod pengikat C, baca juga [panduan C](/ms/languages/c).

## Butiran enjin

- Sokongan Fortran meliputi sumber format tetap dan format bebas: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` dan `.f08`.
- Fungsi dan subrutin ialah simbol boleh panggil, padanan simbol tidak sensitif huruf besar kecil, dan `use` serta `include` menjadi hubungan import.
- Kira-kira 165 prosedur intrinsik (rutin I/O, matematik, tatasusunan, rentetan, penukaran jenis dan bit) ditapis daripada hubungan. Hubungan decorator dan pengecualian ditanda sebagai tidak berkenaan.

## Titik masuk MCP yang berguna

- `find_symbol`: Mulakan dengan nama subrutin, fungsi atau modul; padanan mengabaikan huruf besar kecil seperti Fortran.
- `dependency_search`: Gunakan penjelajahan arah masuk pada rutin penyelesai atau modul kongsi untuk melihat semua pemanggil sebelum perubahan berangka.
- `get_task_context`: Gunakan untuk gesaan seperti “jejaki cara syarat sempadan digunakan dalam gelung penyelesai”.
