Chuyển tới nội dung
cd /languages
  • Di sản khoa học
  • Lập trình
  • Hỗ trợ AST và symbol

Fortran trên Maguyva: đồ thị mã cho codebase khoa học

Maguyva hỗ trợ Fortran với AST, ký hiệu và đồ thị, để agent AI có thể lần theo subroutine, module và derived type trước khi thay đổi mã tính toán số.

Vì sao Fortran cần cấu trúc chứ không phải so khớp chuỗi

Codebase Fortran thường cũ và lớn, do chuyên gia lĩnh vực viết chứ không phải đội phần mềm. Các routine tên SOLVE, Solve và solve là cùng một routine. Module trải rộng trên hàng trăm tệp, và thư viện thủ tục intrinsic lớn đến mức một danh sách lời gọi ngây thơ phần lớn chỉ toàn SQRT, SUM và WRITE.

Một agent chỉ dùng grep sẽ chìm trong nhiễu đó. Maguyva đưa cho agent cấu trúc trước: những đơn vị chương trình nào tồn tại, chúng dùng module nào, và routine nào trong chính mã của bạn gọi lẫn nhau.

Maguyva trích xuất gì từ Fortran

Maguyva bao phủ mã nguồn dạng cố định và dạng tự do (.f, .for, .ftn, .f90, .f95, .f03, .f08). Hàm và subroutine được trích xuất thành ký hiệu có thể gọi, và derived type có thể được chọn làm định nghĩa kiểu trong tìm kiếm cấu trúc.

So khớp ký hiệu không phân biệt chữ hoa chữ thường, giống như chính Fortran. Quan hệ nhập đến từ câu lệnh use và include; từ khóa được bỏ đi để đồ thị lưu tên module. Lời gọi, thao tác đọc, phép gán, tham chiếu kiểu và kế thừa từ derived type mở rộng cũng được đưa vào đồ thị.

Bộ lọc quan hệ loại bỏ khoảng 165 thủ tục intrinsic (câu lệnh I/O và các routine toán học, mảng, chuỗi, chuyển đổi kiểu và thao tác bit), để các cạnh còn lại trỏ vào mã của chính bạn.

Ví dụ prompt cho agent

  • “Ai gọi compute_flux, và họ dùng những module nào?” (find_symbol, sau đó dependency_search theo chiều vào)
  • “Lần theo cách điều kiện biên được áp dụng trong vòng lặp của bộ giải.” (get_task_context)
  • “Tìm mọi đơn vị chương trình dùng module constants.” (text_pattern_search cho use constants, sau đó find_symbol)

Giới hạn đã biết

  • Fortran không có decorator hay xử lý ngoại lệ, nên các loại quan hệ này được đánh dấu là không áp dụng.
  • Thủ tục gắn với kiểu dùng chung nút với hàm và subroutine thông thường. Hãy dùng preset functions trong structural_search; preset methods không chọn nút Fortran nào.
  • Lời gọi tới các intrinsic đã bị lọc không xuất hiện dưới dạng cạnh đồ thị. Dùng text_pattern_search khi bạn cần mọi WRITE hoặc OPEN.

Bước tiếp theo

Kết nối một kho mã bằng hướng dẫn bắt đầu nhanh, sau đó xem toàn bộ ma trận hỗ trợ trên trang tương thích. Nếu mã Fortran của bạn tồn tại cùng mã liên kết C, hãy đọc thêm hướng dẫn C.

Phù hợp nhất

  • > Các nhóm nghiên cứu, kỹ thuật và HPC đang duy trì bộ giải, mô phỏng hoặc thư viện số viết bằng Fortran có tuổi đời lâu hơn cả nhóm hiện tại.
  • > Các kho mã nơi tệp `.f` dạng cố định tồn tại cùng module `.f90` và mã dạng tự do mới hơn, thường đi kèm wrapper bằng C hoặc Python.
  • > Các đợt review có agent hỗ trợ, trong đó bước đầu tiên là tìm xem subroutine nào chạm vào một module dùng chung trước khi logic số thay đổi.

Workflow agent

  • > Tìm các subroutine và hàm gọi một routine của bộ giải trước khi đối số hoặc đơn vị của nó thay đổi.
  • > Liệt kê các module mà một đơn vị chương trình nhập bằng `use` và nhảy tới định nghĩa của chúng.
  • > Tìm nơi một derived type được khai báo và các thủ tục sử dụng nó.

Chi tiết engine

  • > Hỗ trợ Fortran bao phủ mã nguồn dạng cố định và dạng tự do: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` và `.f08`.
  • > Hàm và subroutine là ký hiệu có thể gọi, so khớp ký hiệu không phân biệt chữ hoa chữ thường, và `use` cùng `include` trở thành quan hệ nhập.
  • > Khoảng 165 thủ tục intrinsic (routine I/O, toán học, mảng, chuỗi, chuyển đổi kiểu và bit) bị lọc khỏi quan hệ. Quan hệ decorator và ngoại lệ được đánh dấu là không áp dụng.

Điểm khởi đầu MCP hữu ích

  • find_symbol

    Bắt đầu từ tên subroutine, hàm hoặc module; so khớp bỏ qua chữ hoa chữ thường, giống Fortran.

  • dependency_search

    Dùng duyệt theo chiều vào trên một routine của bộ giải hoặc module dùng chung để thấy mọi nơi gọi trước một thay đổi về số.

  • get_task_context

    Dùng cho các prompt như “lần theo cách điều kiện biên được áp dụng trong vòng lặp của bộ giải”.