Lompat ke konten
cd /languages
  • Warisan ilmiah
  • Pemrograman
  • Dukungan AST dan simbol

Fortran di Maguyva: graf kode untuk basis kode ilmiah

Maguyva mendukung Fortran dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri subrutin, modul, dan derived type sebelum mengubah kode numerik.

Mengapa Fortran butuh struktur, bukan pencocokan string

Basis kode Fortran biasanya tua dan besar, ditulis oleh pakar bidang, bukan tim perangkat lunak. Rutin bernama SOLVE, Solve, dan solve adalah rutin yang sama. Modul tersebar di ratusan berkas, dan pustaka prosedur intrinsik begitu besar sehingga daftar panggilan yang naif sebagian besar berisi SQRT, SUM, dan WRITE.

Agen yang hanya mengandalkan grep akan tenggelam dalam derau itu. Maguyva memberinya struktur lebih dulu: unit program apa saja yang ada, modul apa yang dipakai, dan rutin mana dalam kode Anda sendiri yang saling memanggil.

Apa yang diekstrak Maguyva dari Fortran

Maguyva mencakup sumber berformat tetap dan berformat bebas (.f, .for, .ftn, .f90, .f95, .f03, .f08). Fungsi dan subrutin diekstrak sebagai simbol yang dapat dipanggil, dan derived type dapat dipilih sebagai definisi tipe dalam pencarian struktural.

Pencocokan simbol tidak peka huruf besar-kecil, sama seperti Fortran itu sendiri. Relasi impor berasal dari pernyataan use dan include; kata kuncinya dibuang sehingga graf menyimpan nama modul. Panggilan, pembacaan, penugasan, referensi tipe, dan pewarisan dari derived type yang diperluas juga masuk ke graf.

Filter relasi membuang sekitar 165 prosedur intrinsik (pernyataan I/O serta rutin matematika, larik, string, konversi tipe, dan manipulasi bit), sehingga edge yang tersisa menunjuk ke kode Anda sendiri.

Contoh prompt agen

  • “Siapa yang memanggil compute_flux, dan modul apa yang mereka gunakan?” (find_symbol, lalu dependency_search arah masuk)
  • “Telusuri bagaimana syarat batas diterapkan di loop solver.” (get_task_context)
  • “Temukan setiap unit program yang menggunakan modul constants.” (text_pattern_search untuk use constants, lalu find_symbol)

Batasan yang diketahui

  • Fortran tidak memiliki decorator maupun penanganan eksepsi, sehingga jenis relasi tersebut ditandai tidak berlaku.
  • Prosedur yang terikat tipe berbagi node yang sama dengan fungsi dan subrutin biasa. Gunakan preset functions di structural_search; preset methods tidak memilih node Fortran apa pun.
  • Panggilan ke intrinsik yang difilter tidak muncul sebagai edge graf. Gunakan text_pattern_search saat Anda membutuhkan setiap WRITE atau OPEN.

Langkah berikutnya

Hubungkan repositori dengan panduan memulai cepat, lalu periksa matriks dukungan lengkap di halaman kompatibilitas. Jika Fortran Anda hidup berdampingan dengan kode binding C, baca juga panduan C.

Paling cocok untuk

  • > Tim riset, rekayasa, dan HPC yang memelihara solver, simulasi, atau pustaka numerik Fortran yang lebih tua dari tim saat ini.
  • > Repositori tempat berkas `.f` berformat tetap hidup berdampingan dengan modul `.f90` dan kode berformat bebas yang lebih baru, sering kali bersama wrapper C atau Python.
  • > Tinjauan berbantuan agen, dengan langkah pertama mencari subrutin mana yang menyentuh modul bersama sebelum logika numerik berubah.

Workflow agent

  • > Menemukan subrutin dan fungsi yang memanggil rutin solver sebelum argumen atau satuannya berubah.
  • > Mendaftar modul yang diimpor sebuah unit program dengan `use` dan melompat ke definisinya.
  • > Menemukan tempat sebuah derived type dideklarasikan dan prosedur yang menggunakannya.

Detail engine

  • > Dukungan Fortran mencakup sumber berformat tetap dan berformat bebas: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03`, dan `.f08`.
  • > Fungsi dan subrutin adalah simbol yang dapat dipanggil, pencocokan simbol tidak peka huruf besar-kecil, dan `use` serta `include` menjadi relasi impor.
  • > Sekitar 165 prosedur intrinsik (rutin I/O, matematika, larik, string, konversi tipe, dan bit) difilter dari relasi. Relasi decorator dan eksepsi ditandai tidak berlaku.

Titik masuk MCP yang berguna

  • find_symbol

    Mulailah dari nama subrutin, fungsi, atau modul; pencocokan mengabaikan huruf besar-kecil seperti Fortran.

  • dependency_search

    Gunakan penelusuran arah masuk pada rutin solver atau modul bersama untuk melihat semua pemanggil sebelum perubahan numerik.

  • get_task_context

    Gunakan untuk prompt seperti “telusuri bagaimana syarat batas diterapkan di loop solver”.