프로그래밍 언어 Fortran

개요

포트란(Fortran)은 "공식 번역(Formula Translation)"의 약자로, 과학 및 공학 응용 프로그램에 특히 적합한 고급 프로그래밍 언어입니다. 전자 컴퓨터를 위해 개발된 최초의 프로그래밍 언어 중 하나로, 그 시작 이후로 상당히 발전해왔습니다. 포트란은 배열 데이터의 효율적인 조작을 허용하고 복잡한 수학적 계산을 지원하여, 수치 기상 예측, 계산 물리학, 생물정보학 등 여러 분야에서 선택되는 언어입니다.

역사적 측면

생성

포트란은 1950년대 IBM에 의해 수치 계산 및 과학 컴퓨팅을 위해 설계된 언어로 개발되었습니다. 첫 번째 버전인 포트란 I은 1957년에 출시되었습니다. 핵심 아이디어는 과학자와 엔지니어가 기본 하드웨어의 복잡성을 알 필요 없이 프로그램을 작성할 수 있는 언어를 만드는 것이었습니다.

발전

이후 포트란의 여러 버전이 도입되었으며, 각 버전은 새로운 기능을 추가하고 사용성을 개선했습니다. 포트란 II는 곧이어 출시되어 구조적 프로그래밍 기능을 추가했습니다. 1966년에는 포트란 IV가 도입되어 산업 표준이 되었습니다. 포트란 77(1978년 출시)은 문자 데이터 유형 및 개선된 입출력 기능과 같은 기능을 추가했습니다.

1991년부터 포트란 90은 배열 프로그래밍, 모듈 프로그래밍, 재귀 및 동적 메모리 할당을 도입했습니다. 포트란 2003 및 포트란 2008은 객체 지향 프로그래밍 및 C 프로그래밍 언어와의 개선된 상호 운용성과 같은 기능으로 언어를 더욱 향상시켰습니다. 가장 최근의 표준인 포트란 2018은 병렬 처리에 대한 호환성과 기능을 개선하는 추가적인 향상을 가져왔습니다.

현재 상태

포트란은 많은 과학 및 공학 분야에서 여전히 활발히 사용되고 있으며, GNU 포트란(gfortran) 및 인텔 포트란 컴파일러와 같은 현대 컴파일러의 지원을 받고 있습니다. 포트란으로 작성된 대규모 레거시 코드베이스가 있으며, 많은 과학 라이브러리가 포트란으로 작성되어 특정 분야에서 중요한 언어로 자리 잡고 있습니다.

구문 특징

강한 타입

포트란은 변수 유형의 명시적 선언을 요구하는 강한 타입 언어입니다. 예를 들어:

INTEGER :: i
REAL :: x
CHARACTER(len=10) :: name

배열 처리

포트란은 배열 처리에 뛰어나며, 간단한 구문으로 전체 배열에 대한 연산을 허용합니다.

REAL, DIMENSION(10) :: A
A = 2.0 * A  ! 배열 A의 각 요소를 2로 곱함

제어 구조

포트란은 루프 및 조건문과 같은 전통적인 제어 구조를 제공합니다.

DO i = 1, 10
   IF (A(i) > 0) THEN
       PRINT *, 'Positive'
   END IF
END DO

함수 및 서브루틴

포트란은 모듈화 프로그래밍을 위한 함수 및 서브루틴 정의를 허용합니다.

FUNCTION square(x)
   REAL :: square
   REAL, INTENT(IN) :: x
   square = x * x
END FUNCTION square

암시적 타입

기본적으로 포트란은 "I", "J", "K", "L", "M" 또는 "N"으로 시작하는 이름을 가진 변수가 암시적으로 INTEGER로 간주하는 규칙을 가지고 있습니다. 이는 명확성을 위해 재정의할 수 있습니다.

IMPLICIT NONE  ! 암시적 타입 비활성화
INTEGER :: I
REAL :: R

Do-While 루프

포트란은 조건에 따라 반복 실행을 위한 do-while 루프를 지원합니다.

i = 1
DO WHILE (i <= 10)
   PRINT *, i
   i = i + 1
END DO

파생 타입

포트란은 구조와 유사한 데이터 정의를 허용하는 강력한 사용자 정의 타입인 파생 타입을 가지고 있습니다.

TYPE :: Person
   CHARACTER(len=20) :: name
   INTEGER :: age
END TYPE Person

TYPE(Person) :: p1

모듈 지원

포트란은 데이터와 절차를 캡슐화하기 위한 모듈을 지원하여 코드 재사용 및 조직화를 촉진합니다.

MODULE myModule
   CONTAINS
   SUBROUTINE mySubroutine()
       ! 구현
   END SUBROUTINE
END MODULE

포인터 사용

포트란은 C와 유사하게 동적 메모리 관리를 용이하게 하는 포인터를 지원합니다.

REAL, POINTER :: pA
ALLOCATE(pA(10))  ! 동적으로 배열 할당

상호 운용성

포트란은 C와의 상호 운용성을 위한 기능을 가지고 있어 혼합 언어 프로그래밍을 가능하게 합니다.

INTERFACE
   FUNCTION c_function(x) BIND(C, NAME="c_function")
       INTEGER(C_INT) :: c_function(INTEGER)
   END FUNCTION c_function
END INTERFACE

개발 도구 및 런타임

컴파일러 및 인터프리터

가장 인기 있는 포트란 컴파일러는 다음과 같습니다:

통합 개발 환경 (IDE)

포트란은 다른 언어들처럼 현대 IDE와 일반적으로 연관되지 않지만, 여러 IDE가 이를 지원합니다:

프로젝트 빌드

포트란 프로젝트를 빌드하는 것은 일반적으로 .f, .f90 또는 .f95 확장자를 가진 소스 파일을 생성하고 포트란 컴파일러를 사용하여 컴파일하는 것을 포함합니다. 일반적인 명령은 다음과 같을 수 있습니다:

gfortran -o my_program my_source.f90

포트란의 응용

포트란은 과학 컴퓨팅, 수치 기상 예측, 기후 모델링, 계산 물리학, 계산 화학 및 생물정보학에서 광범위하게 사용됩니다. 특히 무거운 수치 계산 및 시뮬레이션에서 성능으로 잘 알려져 있습니다.

유사 언어와의 비교

포트란의 주요 경쟁자는 과학 및 공학 프로그래밍 분야에서 다음과 같습니다:

소스-투-소스 변환 팁

포트란에는 레거시 코드를 더 현대적인 언어로 변환하거나 기존 코드를 최적화하는 데 도움이 되는 여러 소스-투-소스 변환 도구가 있습니다. 일부 도구는 다음과 같습니다:

이러한 도구는 이전 포트란 버전이나 완전히 다른 프로그래밍 패러다임에서의 전환을 용이하게 하면서 성능과 기능을 유지하는 데 도움을 줍니다.