본문으로 건너뛰기
cd /languages
  • 과학 계산의 유산
  • 프로그래밍
  • AST 및 심볼 지원

Maguyva의 Fortran 지원: 과학 계산 코드베이스를 위한 코드 그래프

Maguyva는 AST, 심볼, 그래프로 Fortran을 지원하여, AI 에이전트가 수치 코드를 바꾸기 전에 서브루틴, 모듈, 파생 타입을 추적할 수 있게 합니다.

Fortran에는 문자열 매칭이 아니라 구조가 필요합니다

Fortran 코드베이스는 오래되고, 크고, 소프트웨어 팀이 아니라 도메인 전문가가 작성한 경우가 많습니다. SOLVE, Solve, solve라는 이름의 루틴은 모두 같은 루틴입니다. 모듈은 수백 개의 파일에서 공유되고, 내장 프로시저 라이브러리도 커서 단순한 호출 목록은 대부분 SQRT, SUM, WRITE로 채워집니다.

grep만 쓰는 에이전트는 이 잡음에 묻혀 버립니다. Maguyva는 먼저 구조를 건넵니다. 어떤 프로그램 단위가 있고, 어떤 모듈을 쓰며, 어떤 사용자 루틴이 서로를 호출하는지입니다.

Maguyva가 Fortran에서 추출하는 것

Maguyva는 고정 형식과 자유 형식 소스(.f, .for, .ftn, .f90, .f95, .f03, .f08)를 지원합니다. 함수와 서브루틴은 호출 가능한 심볼로 추출되고, 파생 타입은 구조적 검색에서 타입 정의로 선택할 수 있습니다.

심볼 매칭은 Fortran 자체의 규칙에 맞춰 대소문자를 구분하지 않습니다. 임포트 관계는 use와 include에서 만들어지며, 키워드를 떼어 내고 모듈 이름을 그래프에 저장합니다. 호출, 읽기, 대입, 타입 참조, 그리고 확장된 파생 타입의 상속도 모두 그래프에 들어갑니다.

관계 필터는 약 165개의 내장 프로시저(I/O 문, 수학, 배열, 문자열, 타입 변환, 비트 조작 루틴)를 제외하므로, 남는 엣지는 여러분의 코드를 가리킵니다.

에이전트 프롬프트 예시

  • “compute_flux를 호출하는 서브루틴은 무엇이고, 각각 어떤 모듈을 쓰나요?” (find_symbol, 그다음 dependency_search incoming)
  • “솔버 루프에서 경계 조건이 어떻게 적용되는지 추적해 줘.” (get_task_context)
  • “constants 모듈을 사용하는 프로그램 단위를 모두 찾아 줘.” (use constants에 대해 text_pattern_search, 그다음 find_symbol)

알려진 한계

  • Fortran에는 데코레이터도 예외 처리도 없으므로, 해당 관계 유형은 적용 불가로 표시됩니다.
  • 타입 바운드 프로시저는 일반 함수 및 서브루틴과 같은 노드를 공유합니다. structural_search에서는 functions 프리셋을 사용하세요. methods 프리셋은 Fortran 노드를 선택하지 않습니다.
  • 필터링된 내장 프로시저 호출은 그래프 엣지로 나타나지 않습니다. 모든 WRITE나 OPEN이 필요하다면 text_pattern_search를 사용하세요.

다음 단계

빠른 시작으로 저장소를 연결한 다음, 호환성 페이지에서 전체 지원 매트릭스를 확인하세요. Fortran이 C 글루 코드와 함께 있다면 C 가이드도 읽어 보세요.

가장 적합한 경우

  • > 지금 팀보다 오래된 Fortran 솔버, 시뮬레이션, 수치 라이브러리를 유지보수하는 연구, 엔지니어링, HPC 팀.
  • > 고정 형식 `.f` 파일과 자유 형식 `.f90` 이후 모듈이 섞여 있고, 옆에 C나 Python 래퍼가 함께 있는 경우가 많은 저장소.
  • > 수치 변경 전에 공유 모듈을 건드리는 서브루틴을 파악하는 것이 첫 번째 일인 에이전트 지원 리뷰.

에이전트 워크플로

  • > 솔버 루틴의 인자나 단위를 바꾸기 전에 그 루틴을 호출하는 서브루틴과 함수를 추적합니다.
  • > 프로그램 단위가 `use`로 가져오는 모듈을 나열하고 그 정의까지 따라갑니다.
  • > 파생 타입이 어디에 선언되어 있고 어떤 프로시저가 그것을 다루는지 찾습니다.

엔진 세부 정보

  • > Fortran 지원은 고정 형식과 자유 형식 소스를 포함합니다: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03`, `.f08`.
  • > 함수와 서브루틴은 호출 가능한 심볼이고, 심볼 매칭은 대소문자를 구분하지 않으며, `use`와 `include`는 임포트 관계가 됩니다.
  • > 약 165개의 내장 프로시저(I/O, 수학, 배열, 문자열, 타입 변환, 비트 루틴)는 관계에서 걸러집니다. 데코레이터와 예외 관계는 적용 불가로 표시됩니다.

유용한 MCP 진입점

  • find_symbol

    서브루틴, 함수, 모듈 이름으로 시작하세요. Fortran처럼 매칭은 대소문자를 구분하지 않습니다.

  • dependency_search

    수치 변경 전에 솔버나 공유 모듈 루틴에 incoming 탐색을 써서 모든 호출자를 확인하세요.

  • get_task_context

    “솔버 루프에서 경계 조건이 어떻게 적용되는지 추적해 줘” 같은 프롬프트에 쓰세요.