GNU Fortran 소개

GNU Fortran 소개 (About GNU Fortran)

GNU Fortran(gfortran)이 어떤 컴파일러인지, 어떤 표준과 확장을 지원하고 무엇으로 구성되어 있는지 전반을 살펴봐요.

출처: About GNU Fortran

본문

GNU Fortran 컴파일러는 g77의 후속작이에요. g77은 GCC 4 이전(2005년 출시)에 포함되어 있던 Fortran 77 프론트엔드였죠. gfortran은 대부분의 g77 확장과 명령행 옵션과 하위 호환되지만, 더 현대적인 포트란 방언을 지원하도록 설계된 완전히 새로운 구현이에요. GNU Fortran은 Fortran 77, 90, 95 표준을 완전히 구현하고, Fortran 2003과 2008 표준의 대부분, 그리고 2018 표준의 일부 기능을 구현해요. 병렬 프로그래밍을 위한 OpenMP·OpenACC 지원을 포함한 여러 확장도 구현하고 있어요.

GNU Fortran은 NIST Fortran 77 Test Suite를 통과하고, LAPACK Test Suite에서도 수용 가능한 결과를 내요. Polyhedron 포트란 컴파일러 벤치마크와 Livermore Fortran Kernels 테스트에서도 나름 괜찮은 성능을 보여줘요. 실제로 규모가 큰 실세계 프로그램들(HARMONIE·HIRLAM 기상 예보 코드, Tonto 양자 화학 패키지 등)을 컴파일하는 데 쓰여 왔고, 더 많은 목록은 https://gcc.gnu.org/wiki/GfortranApps 에서 볼 수 있어요.

GNU Fortran이 제공하는 기능은 다음과 같아요.

  • 파일에 저장된 Fortran 77 소스 코드 지시문을 포함한 프로그램을 읽어요.
  • 프로그램을 컴퓨터가 더 빨리 수행할 수 있는 지시문으로 번역해요. 컴파일 결과는 **기계어(machine code)**가 되는데, 사람은 기계어를 직접 쓸 때 사소한 실수를 내기 쉬워서 포트란(또는 C++, Ada, Java)을 쓰는 것만 못해요.
  • 컴파일러가 소스 코드에서 바이너리를 만들지 못하는 이유에 대한 정보를 제공해요. 예를 들어 소스 코드에 결함이 있는 경우죠. 포트란 언어 표준은 컴파일러가 코드의 오류를 짚어내도록 요구해요. 언어를 잘못 쓰면 **오류 메시지(error message)**가 나오고, 컴파일러는 문법상 맞지만 컴퓨터에 뭔가 의심스러운 일을 시키는 경우도 진단하려고 해요. 이런 진단 메시지를 **경고 메시지(warning message)**라고 불러요.
  • 소스 코드에서 기계어로 가는 번역 과정에 대한 선택적 정보를 제공해요. 이는 소스 코드에서는 잘 안 보이지만 더 낮은 수준의 컴파일러 출력에서는 더 쉽게 찾을 수 있는 특정 버그의 원인을 찾는 데 도움을 줘요. 컴파일러 자체의 버그를 찾는 데도 유용해요.
  • 생성된 기계어에 디버깅 도구(디버거, 예를 들어 GNU Debugger gdb)로 프로그램의 버그를 찾기 쉽게 하는 정보를 넣어요.
  • 프로그램의 문장이 요청한 동작을 수행할, 이미 생성된 기계어를 찾아 모아요. 이 기계어는 모듈로 구성되어 사용자 프로그램에 연결(link)돼요.

GNU Fortran 컴파일러는 여러 구성 요소로 이루어져 있어요.

  • gcc 명령의 한 버전(때로는 시스템의 cc 명령으로 설치되기도 해요). 이 버전은 포트란 소스 코드도 이해하고 받아들여요. gcc 명령은 GNU Compiler Collection(GCC)에 있는 모든 언어의 드라이버 프로그램이에요. gcc로 GCC에 프론트엔드가 있는 어떤 언어의 소스든 컴파일할 수 있어요.
  • gfortran 명령 자체(때로는 시스템의 f95 명령으로 설치되기도 해요). gfortran은 그냥 또 하나의 드라이버 프로그램인데, 포트란 컴파일러 전용이에요. gccgfortran 명령의 주요 차이는, 후자가 올바른 라이브러리를 프로그램에 자동으로 링크한다는 점이에요.
  • 런타임 라이브러리 모음. 이 라이브러리들은 gfortran 컴파일 단계가 생성한 기계어로는 직접 제공되지 않는 포트란 언어 기능(내장 함수·서브루틴, 파일 및 운영체제와 상호작용하는 루틴 등)을 지원하는 기계어를 담고 있어요.
  • 포트란 컴파일러 자체(f951). 이는 GNU Fortran 파서이자 코드 생성기로, GCC 백엔드 라이브러리와 연결·인터페이스되어 있어요. f951은 소스 코드를 어셈블러 코드로 "번역"해요. 보통 이 프로그램을 직접 쓰지는 않고, gccgfortran 드라이버 프로그램이 대신 호출해 줘요.

더 알아보기

  • GNU Fortran과 GCC의 관계
  • GNU Fortran 컴파일러 드라이버 사용법
  • gfortran 인터럽트·런타임 옵션