포트란
1. 개요
1950년대 말에 IBM의 존 배커스(John Backus) 외 6명의 전문가가 완성한 최초의 고급 프로그래밍 언어 중 하나이다. 알골과 함께 과학 계산용으로 주로 사용되고 매우 간결하고 엄격한 구문 형식을 가지고 있다. ANSI와 ISO에서 표준화되었다. 이름은 수식 변환기(FORmula TRANslator)라는 뜻으로, 이름 그대로 수식을 계산하는 데 특화되어 있다. 수식 계산에 특화되어 있다는 것은
- 수식을 간단하게 표현할 수 있다.
- 수치 계산이 빠르게 수행된다.
포트란을 쓸 수 있는 IDE에 대해서는 위키피디아에 잘 정리되어 있으니 참고하도록 하자.
2. 표준화의 진행
WG5로 불리는 ISO 포트란 위원회에서 ISO표준 논의가 진행되며[1] J3로 불리는 US Fortran committee 에서 ANSI 표준이 논의된다.[2]
대체적으로 ANSI 표준은 거의 변화 없이 ISO 표준으로 받아들여 진다. 현재의 WG5의 구성원은 J3와 대동소이하며, J3는 현재 WG5의 부분으로 활동하고 있다.
1956년 개발, 1957년 IBM에서 "THE FORTRAN AUTOMATIC CODING SYSTEM FOR THE IBM 704 EPDM"이란 이름으로 발표한 이후의 약 10여년간은 포트란계의 춘추전국시대였다. 다양한 벤더에서 그들만의 언어적 특징과, 아이디어, 문법을 가지며 이런 저런 포트란을 만들었기 때문이다. FORTRAN II 니 FORTRAN D 니 하는 녀석들도 있었다. 그 시절에도 40여 가지의 컴파일러들이 있었다 한다.
1966년에 "Business Equipment Manufacturers Association"의 주도하에 첫 ANSI 표준이 지정되었으며, 이 표준은 36페이지 짜리 문서로 발간되었고 FORTRAN66 또는 FORTRAN IV 라고도 불리며(이는 FORTRAN IV 컴파일러를 그 기반으로 표준화가 진행되었기 때문이다.) 정확한 명칭은 ANSI 3.9-1966이다. 최초의 ANSI표준이 등장하면서 기존의 난해한 상황은 약간 정리가 되었다. FREQUENCY문, SENSE문 같은 여러 벤더에서 자의적으로 사용하던 문법들이 사라지기 시작했기 때문이다. ISO R1539:1972는 FORTRAN66에 대응하는 ISO 표준에 해당한다.(해당 표준의 ISO의 승인은 1972년에 되었다.)
이후 가장 널리 알려지고 유명해진 표준은 1978년에 ANSI에 의해 승인된 FORTRAN 77으로 그 문법 만으로도 260여 페이지가 되었다. 현재 대대로 내려오고 있는 많은 수치해석 코드들은 이 표준을 따라 작성된 예가 많다. FORTRAN77은 처음으로 공식적으로 OPEN문, CHARACTER 형 선언이 추가되었다. CHARACTER형이 추가되기 이전엔 각 컴파일러 자의적으로 사용하고 있거나, Hollerith 수식을 사용했다.[3] ISO 1539:1980 이 ISO FORTRAN77에 해당이된다.
한편, 미 국방부에서는 이 ANSI FORTRAN 77 에 추가적인 기능이 포함된 표준을 발표했다. [4] 이 미국방부 77표준에는 다음과 같은 문법이 적용되었다.
- END DO 문
- IMPLICIT NONE 문
- INCLUDE 문
- 정수연산에 대한 비트연산 내장함수 추가
- DO WHILE 루프 문
차기 포트란 표준을 모색하던 포트란 위원회의 구상은 FORTRAN88 이었으나(66,77,88.. 이런 규칙을 가지려고 노력했었던 것 같다) 몇 가지 문법사항이 추가되며 결국 Fortran 90으로 발표된다. ISO/IEC 1539 : 1991 (E) 가 ISO Fortran90의 공식 문서가 된다. 분량은 388쪽에 달한다. 이 버전에선 Modern한 언어로서 포트란이 가져야 할 특징들이 대대적으로 정의되었고, 기타 빠르게 변하고 있는 컴퓨팅 업계의 흐름을 따라잡기 위한 시도가 반영되었다. FORTRAN → Fortran으로 이때 표준의 이름에 소문자가 쓰이기 시작한다.
Fortran95는 Fortran90에 추가적인 기능의 필요성이 있어서 발표된 마이너 업데이트다. 병렬컴퓨팅을 지원하기 위한 FORALL문 같은 것(이 문법은 실패한 기능이다.)[5] 이 추가되었고, 기존의 Non-Modern 한 문법으로 여겨지던 표준이 Obsolescent 에서 Deleted로 바뀜으로, 기존 몇 개의 문법에 대한 삭제가 일어난 표준이다. 포트란 위원회는 이때부터 10년기준의 메이저 업데이트와, 중간 5년단위의 마이너 업데이트를 기획하기 시작한다.[6]
10년 단위 메이저 업데이트로 Fortran2000이 기획되었으나, 역시나 합의가 늦춰지고 Fortran2003으로 발표된다. ISO/IEC 1539-1:2004(E) 가 공식 ISO Fortran 2003의 문서가 된다. 문서의 양은 585쪽으로 늘어났다. C언어 바인딩 공식 지원, 객체 지향 프로그래밍, IEEE 부동소수점연산 예외 처리 모듈 지원등을 큰 특징으로 한다. 사실 사용자들이 현실적으로 가장 체감하는 가장 큰 기능은 ISO_C_BINDING 내장 모듈이며, C언어와 Mixing에 대한 방법론을 하나로 통일 시킨 혁신적인 표준이다.
Fortran2008은 역시 마이너 업데이트에 해당한다. 기존 Forall 구문이 병렬화를 제대로 지원하지 못했는데, 이는 문법의 제약상 모호한 부분에 의해, 정확한 고려가 없다면 거의 모든 컴파일러에서 그냥 Do Loop를 사용하는 것과 비교해 퍼포먼스상의 이득이 발생하지 않는 형태로 구현되어 버렸다. 이를 보완하기 위해서 Do concurrent를 추가하였고, 95때와 마찬가지로 병렬 프로그래밍에 대한 지원으로 HPF(High performance fortran)프로젝트 의 기능들이 대거 추가되었으며, Cray 포트란의 기능이었던 Coarray 기능이 추가되었다.
차기 포트란 표준은 Fortran2015로 예상되고 있다(기획대로 된 적이 없어서.. 그리 될 지는 알 수 없지만). 메이저 업데이트가 있어야 할 차례이지만, 마이너 업데이트로 기획되고 있다. C언어의 헤더파일을 사용하는 것과 같은 C 바인딩에 대한 확장기능을 제공하는 것을 주요 골자로 한다.
현재 대부분의 "컴파일러"는 레거시(하위 호환)를 기본으로 유지해 주며, 기본적으로 자기들만의 확장기능을 추가적으로 제공한다. 초기 시대에 각 컴파일러마다 제각각 지원하던 기능들을 계속 지원하며, 컴퓨터 환경의 추가적 요구들에 표준보다 먼저 제공하는 것은 컴파일러를 판매하는 상업회사의 기본적 태도이다. 표준은 아니지만 여러 컴파일러에서 비슷하게 지원하는 문법은 특히 사용자에게 착각을 일으키기도 한다. 어떤 회사에서 특징적으로 제공하는 문법이 표준으로 들어갈 수도 있고 아닐 수도 있다. 여러 컴파일러에서 지원하지만, 표준은 아닌 문법/내장프로시저들이 다수 존재한다. 이것은 본질적으로 각 코드의 이식성의 유지에 어려움을 만들며, 각 컴파일러에 대한 의존성을 낮추기 위해서는 표준에 부합하는 코드를 작성해야 한다.
표준이 계속 나오면서 obsolescent[7] , deleted[8] 로 구별되는 문법 사항들이 나온다.
이하는 90에서 obsolescent로 분류되었던 문법이다.
- Arithmetic IF
- Real and double precision DO control variables and DO loop control expressions
- Shared DO termination and termination on a statement other than END DO or CONTINUE statement.
- Branching to an END IF statement from outside its IF block
- Alternate return
- PAUSE statement
- ASSIGN statement and assigned GO TO statements
- Assigned FORMAT specifiers
- H edit descriptor (일명 홀러리스 문자열)
이하는 95에서 삭제(deleted)된 문법이다. 따라서 현재(2008이 가장 최근이며 앞으로 2015가 발표될 것으로 예상되는 시점)는 포트란 표준이 아닌 문법이다.
- ASSIGN and assigned GO TO statements (할당형 GO TO)
- Assigned FORMAT specifier ( 할당형 FORMAT)
- Branching to an END IF statement from outside its IF block (IF 블록의 외부에서 END IF 문으로 분기)
- H edit descriptor (홀러리스 문자열)
- PAUSE statement (PAUSE를 이용한 멈춤)
- Real and double precision DO control variables and DO loop control expressions ( DO 루프 제어를 실수형 변수로 하는 것)
- Arithmetic IF
- Shared DO termination and termination on a statement other than END DO or CONTINUE
- Alternate return
- Computed GO TO
- Statement functions
- DATA statements amongst executable statements
- Assumed length character functions
- Fixed form source
- CHARACTER* form of CHARACTER declaration
- ENTRY statements
2008 현재 다음의 추가적 항목의 deleted가 있다.
- Vertical format control.
2.1. 표준에 대한 오해들
포트란은 유독 77, 90을 떠벌리기를 좋아한다. 77, 90 표준을 제대로 구별할 줄 알면서.. 제대로 쓰인 문서가 별로 없다(−특히, 한글로 된−) 심지어 많은 책들도 그러하지 못하다. 72년에 탄생한 C언어도 여럿 표준을 개정해가고 있고 바뀌어 가고 있음에도, 유독 포트란을 고대어라고 치부하는 치기어린 오해들이 넘친다.
1. Fortran90은 FORTRAN77을 완전히 포함하는 표준이다. (deleted 된 항목이 존재하지 않는다.) 모든 "표준" FORTRAN77 코드는 완전하게 Fortran90이다. 코드의 "모양"이나 확장자명은 77이니 90이니를 나누는 기준이 아니다.
2. Fixed form이냐 Free form 이냐는 코딩 스타일 문제이다. 물론 77에선 Fixed form 밖에 없다. (90 이후의 기준으로는 그저 선택의 문제이다) 대부분의 컴파일러에서 fixed, free form은 확장자로 체크한다.확장자에 표준의 의미는 담겨있지 않다.
3. 77의 이름을 달고 있는 컴파일러들도 90에서야 표준인 기능들을 다수 "확장 기능"으로 지원한다. 77표준만 딱 지원하는 것이 아니다. 80년대 후반이나 90년대이후 만들어진 77이름을 단 컴파일러들은 대다수가 (END DO, IMPLICIT NONE 문 같은 - ANSI 표준이 아닌 미국 국방부버전의 확장77부터 추가된 기능. 공식적으론 90이상의 문법으로 불려야 한다.) 이후에 표준화된 문법을 확장기능으로 지원한다.
3. 특징
산술 기호를 그대로 사용할 수 있으며, 삼각함수·지수함수·대수함수 등과 같은 기초적인 수학 함수들을 그대로 불러내어 쓸 수 있다. 또 실수만이 아니라 복소수를 그대로 변수 형으로 쓸 수 있다. 물론 이러한 장점은 현재의 각종 프로그래밍 언어에서는 표준 라이브러리 등을 통해서 기본적으로 제공되는 기능이지만, 당시에는 굉장히 획기적인 방법이었다. 배열에 대해서도 많이 지원해 줘서, 옛날에 나온 언어임에도 불구하고 MATLAB에서처럼 쉽게 배열을 다룰 수 있다.
기본적으로 절차적 프로그래밍(procedural programming)이지만 90, 2003을 거치면서 OOP의 요소를 많이 넣게 되었다. 하지만 하위호환을 유지해야 하므로 아무래도 C++[9] 에 비해서는 문법적/구조적으로 불편한 부분이 많다.
C와의 큰 차이점 중 하나로 배열의 배치 순서가 서로 다르다. C는 Row-Major Order를 따르며, Fortran은 Column-Major Order를 따른다. C에서는 (1,1) 다음이 (1,2)이지만, 포트란에서는 (2,1)가 된다. 따라서 다른 언어와 함께 프로그래밍을 할 때는 변수를 넘겨줄 때 순서를 바꾸어 주어야 한다. 또한 반복 계산을 할 때 가장 처음 인수부터 돌려 줘야 성능의 저하가 없다. 또한, 배열의 시작 숫자가 0이 아닌 1부터 시작이다. 사용자가 배열의 인덱스를 조정하는 것이 가능한 것은 포트란의 특징 중 하나이다. 배열의 인덱스를 -100 ~ 100처럼 지정하는 것이 가능하다.
초기 버전은 대문자만 인정했기 때문에 가독성이 딸린다. 그 이유는 키보드가 없던 시절 천공 카드로 프로그램을 입력해야 했는데 여기엔 소문자가 없었기 때문.
학교 교육은 다음과 같다. 서울대학교 수리과학부나 통계학과, 연세대학교 이과대학, 경희대학교 우주과학과와 원자력공학과, 서울시립대학교 토목공학과, 부산대학교 조선해양공학과, 부경대학교 환경대기과학과, 한국항공대학교 항공우주 및 기계공학과, 한국해양대학교 공과대학, 홍익대학교 기계시스템 디자인공학과 수치해석과목, 경북대학교 토목공학과와 지구시스템과학부 천문대기과학전공, 안동대학교 기계공학과, 한양대학교 ERICA캠퍼스 소프트웨어학부 수치해석 과목.
3.1. 속도 논쟁
물리학 커뮤니티에서 종종 볼수 있는 만년 떡밥. 수치해석에 있어서 포트란을 사용하는 것이 항상 좋다는 이야기는 아니지만, Fortran 77의 역량을 맘껏 발휘할 수 있는 알고리즘을 돌릴 경우 C++의 2배 정도의 속도를 낸다. 참조
역량을 발휘할 수 있는 예로는 재귀적 호출을 쓰지 않고 해결할 수 있는 종류가 있다. 포트란은 원래 함수의 재귀적 호출을 지원하지 않았다. 재귀함수를 호출하면 그때마다 필요한 오버헤드를 수행해야 하고, 스택에 있는 변수를 참조할 때 한다리 건너 간접적으로 접근해야 하는 등 속도에 불리한 점이 있다. 포트란의 속도가 빠른 이유가 바로 이것. 90 표준에서는 재귀함수를 지원하지만, 사용에 주의를 요한다.
물론 복잡한 자료구조를 가진 알고리즘을 짜야 할 경우, 포트란77로 짜다가 돌아버릴지도 모른다.
속도 차이가 생기는 원인은 언어의 컴파일러의 프로그램 최적화, 또는 Application 프로그래머의 프로그래밍 최적화 문제다. 어떤 컴파일러가 어떤 문법을 어떤 Architecture에 맞게 최적화 해내는가를 고급 프로그래밍 언어의 레벨에서 결정될 수 없다. C와 Fortran 두 언어 모두 고급 프로그래밍 언어로 컴파일러에 의해 바이너리 코드로 변환되어야 한다. 즉, 엄밀히 말하자면 C가 포트란보다 빠른 게 아니라 C 컴파일러를 거친 프로그램이 포트란 컴파일러를 거친 프로그램보다 빠른 거다.
C99 표준 발표 이전에 포트란이 (C에 대해 상대적으로)가진 최적화의 유일한 이점은 프로시저의 인수가 (pointer 또는 target 속성을 가지지 않는다면) 메모리가 오버랩되지 않음을 가정하므로 컴파일러의 입장에서 최적화된 코드를 생성하는데 적합했다는 것이다. C언어에서 C99 표준부터는 restrict keyword를 프로그래머가 명시하여 포인터가 가리키는 메모리 영역이 오버랩 될 수 있는지 그렇지 않은 지를 컴파일러에게 명시적, 선택적으로 알려줄 수 있도록 하여 해결하였다.[10][11][12] 즉, 포인터 앨리어싱의 선택을 과거에는 각 컴파일러에서 컴파일 시 최적화 옵션을 통해 결정하였으나 현재는 언어의 문법 표준으로 포함하도록 하였다.
3.2. 포트란이 사용되는 예
포트란은 과학 계산용 언어를 목표로 IBM이 1950년대 개발한 언어다. 다만, 쓸만한 범용 개발언어가 부족했던 시기였고 언어 사용자층이 두꺼웠던 만큼 범용적인 용도로도 언어가 사용되긴 하였다. 과학기술용 언어로는 포트란, 상업용 언어로는 코볼이라고 할 만큼 대표적인 제 3세대 언어였지만 1980년대 이후로 보다 사용하기 쉬운 제 4세대 언어의 출현으로 이제는 범용 목적으로는 거의 쓰이지 않게 되었으며, 대부분 C 언어로 교체되었다. 하지만 애당초 수치해석용에 특화시켜 개발되었고, 방대한 수치해석 라이브러리를 가지고 있기 때문에 대량의 계산을 해야 하는 특정 분야에서는 중요한 언어로 명맥을 이어가고 있다.
수치계산분야로 연구관련 코드를 찾으면 포트란 코드로는 거의 모든 분야가 다 있다. 그것도 소위 듣보잡들이 만든게 아니라 교과서에 이름이 실릴만한 유명한 사람들이 만들어서 저널에서 실렸고 수십년간 사용되고 수도 없이 검증됐다.
예를 들어, 수퍼컴퓨터 등의 클러스터를 이용한 대량의 계산을 위한 MPI(Message passing interface)의 경우, 포트란과 C 라이브러리로만 나온다. 즉 슈퍼컴퓨터에서는 무조건 C 아니면 포트란을 사용해야 하는 것. 엄청난 양의 수치계산이 필요한 분야의 경우 수퍼컴퓨터를 사용하는데 수퍼컴퓨터는 가격이 아주 비싸고 유지비가 많이 들기 때문에 종량제처럼 돈을 받아서 운영하는 경우가 많다. 돈을 받던 받지않던 실제 자신이 소속된 연구소나 회사 소유의 수퍼컴퓨터라도 직급이나 소속에 따라서 수퍼컴퓨터 사용시간과 사용범위가 제약된다. 그래서 연구자들은 수퍼컴퓨터를 사용할때 자신의 컴퓨터에서 최대한 코드를 완성하고 수퍼컴퓨터에 업로드해서 실행 시켜본후 수정하고 또 수정하는일을 반복한다. 물론 한번에 실행되길 소원하면서. 자기의 수퍼컴퓨터 사용시간을 조금이라도 절약하길 바라는 건 모든 수퍼컴퓨터 사용자의 소망이다. 이런 이유로 수퍼컴퓨터에서 가장 단기간에 성과를 내고 가장 많이 입증된 수퍼컴퓨터 관련 프로그램 코드가 바로 포트란으로 만들어진 코드이다. 이게 현재 포트란의 아주 강력한 장점인 것.
물리학과에서 사용하는 예시로는, 다음과 같은 것들이 있다. 원자핵내 약력에 의한 핵자간 상호작용을 구하는 것은 굉장한 연산을 필요로 하는데 최대한 효율을 올리기 위해서 포트란으로 프로그래밍을 한다. 다입자계 시간에 의존하는 섭동을 구하려면 수치계산밖에 없는데 막대한 계산에는 시간이 걸리니 거기서 포트란이 다시 등장하는 것이다.
양자계산, 흔히 제일원리계산이라고 불리는 분야에서도 포트란으로 짜여져 있는 프로그램들을 많이 볼 수 있다. 이러한 프로그램들은 물질 내부의 원자와 전자 구조를 계산하고 해석할 때 사용되며, 역시 막대한 계산을 효율적으로 수행하기 위해 포트란으로 짜여져 있는 경우가 많다.
대기과학과 해양학의 경우, 일기예보에 쓰이는 해석모델과 수치모델분야의 수치모델이 거의 100% 포트란으로 짜여져있다. 앞에서 언급했듯이 굉장한 계산을 해야하기 때문에 다른 언어보다 빠르고 간결한 포트란을 계속 사용해오고 있다(포트란으로만 짜둬서 다른 언어로 변환하기 어렵다). 대기과학이 세계 슈퍼컴퓨터 사용량의 2위를 차지한다는 점을 고려하면 앞으로도 포트란이 잊혀지지는 않을 것 같다.
X-ray를 다루는 시뮬레이션에도 사용되는데, PENELOPE라는 몬테 카를로 시뮬레이터가 이 언어로 짜여져 있다. 몬테 카를로 시뮬레이션이란 해석적으로 일정 모델을 도입해서 계산하는 게 아니고, 무작정 다수의 입자(이 경우엔 X-ray 광자)를 뿌려서 객체 하나하나당 랜덤하게 경우의 수를 적용해 계산하는 것이라 역시 무지막지한 계산량이 필요하다. 때문에 포트란을 사용한다. 반도체 물성 시뮬레이션을 하는 TCAD도 마찬가지. 스탠포드에서 최초로 출하(?)된 PISCES 부터 다 이 언어로 되어 있다.
전문분야에서는 매우 많은 계산 알고리즘이 포트란 형식으로 되어 있다. 이들 코드를 다른 언어로 포팅하여 사용하는 것 보다는 포트란을 배워서 쓰는 것이 더 빠르고 계산도 효율적이기 때문에 오래된 자연과학/공학의 계산 코드는 포트란으로 된 것이 많다. 얼핏 봐서 C로 짰다고 생각되는 프로그램이나 아무리 봐도 비주얼 스튜디오에서 윈도우 기본 함수를 무지막지하게 갖다 쓴 것처럼 보이는 프로그램도 나중에 알고보면 10MB도 안되는 실행파일 하나, 혹은 라이브러리 파일이 핵심 계산 모듈이고 저것은 포트란으로 만든 경우가 많다. 예를 들어 프로그래밍 언어 파이선의 대표적인 과학계산용 라이브러리인 SciPy의 핵심코드는 포트란이나 C로 만들어져 있다. #
이처럼 학술 또는 연구 용도의 코드에는 아직까지 포트란이 많이 애용되는데, 여기에는 효율성 측면 이외에도 굳이 다른 언어로 다시 만들 유인이 없다는 사실 또한 작용한다. 연구에 사용되는 코드의 코어 부분은 유서깊고 오래된 것들이 많으며, 어떤 것은 지도 교수의 지도 교수의 지도 교수로부터 내려온 것들도 있다(...). 이러한 코드는 당연히 포트란으로 짜여져 있는데, 이 경우에는 코드가 확장되고 덩치가 커져도 코어와의 호환을 위해 포트란을 사용하는 경우가 많다. 이 경우 잠정적인 사용자는 연구원 내지는 대학원생이 되는데, 이들에게 있어서 문법이 단순한 포트란을 익히는 것은 크게 부담이 되지 않는다. 결국 포트란을 익히면 될 일을 굳이 속도가 더 느린 다른 언어로 옮기는 것 자체가 시간 낭비, 인력 낭비가 되는 셈. 그레고리 맨큐는 학부생 1학년 때부터 포트란을 매우 잘 사용했기 때문에(...) 프린스턴에서 연구 조교로 여름 인턴이 가능했다.
잘 쓰고 있는 포트란 legacy code를 굳이 에러를 무릅 써가며 다른 프로그래밍 언어로 변환할 필요는 없다. 그런 행동을 하려고 시간을 쓰다가 지도교수한테 걸리면 바로 "그냥 기존에 있는 포트란 가져다 써" 란 말을 듣기 십상이다. 자신이 포트란과 다른 언어 둘 다 아주 잘 한다면 지도교수에게 안 걸리게 변환해보라. 물론 에러가 나면 지도교수 입에서 나오는 첫말은 "그냥 포트란 쓰지 쓸데없는 짓 하다가 논문 언제 쓸래". 이 말을 듣고 연구실 분위기는 급락.
가끔 오래된 팜탑 PC (휴렛팩커드의 200LX나 IBM의 PC110같은...)에다가 포트란 컴파일러 깔고 공학용 계산기 대신으로 쓰는 괴인들도 존재한다.
다만 요즘은 대학교에서도 학원에서도 포트란을 가르치는 곳이 거의 없기 때문에 (심지어 책도 거의 없다) 적어도 한국에서는 잊혀진 언어 취급을 받게될 날이 멀지 않았다. 데이터베이스 프로그램이 코볼을 대체했듯이 포트란 역시 대부분의 경우에는 MATLAB, 매스매티카 같은 강력한 수치계산 프로그램들에게 자리를 내주고 있다.[13] 하지만 포트란 컴파일러는 gnu 에서 무료로 배포하는 대신 매틀랩, 매스매티카는 상용 프로그램이라 완벽하게 대체하기는 힘들다. 실제로 물리학 전공자가 컴퓨터공학 전공자에게 이 언어에 대해서 이야기하면 컴퓨터공학 전공자는 '역사 속으로 사라진 줄 알았던 언어가 아직도 활발히 쓰이고 있다니!'하면서 놀라는 경우가 있다.
4. 기타
전투기 소프트웨어로 사용된 전적이 있다. F-15S의 소스코드가 포트란으로 코딩되어있는 것. 이 바닥은 FORTRAN보다 더 원시적(?)인 어셈블리어를 주로 사용한다.[14]
우주개발 역사의 한 기둥이었던 언어이기도 하다. 예를 들어 태양계를 벗어난 탐사선인 보이저는 원래 포트란 5로 코드가 짜여졌다. 나중에 유례없는 원격 리프로그래밍을 통해 포트란 77을 이식했다가, 현재는 대부분의 코드를 C 계열 언어로 업그레이드한 상태이지만 계산 효율 등의 이유로 일부 코드에는 포트란 77이 계속 사용되고 있다.
한편, 포트란으로 나온 게임도 있다. 세계 최초의 어드벤처 게임이라고 볼 수 있는 Colossal Cave Adventure라는 게임으로, 현재도 소스 코드를 받아서 컴파일해볼 수 있다.
띄어쓰기를 무시한다. 그래서 변수 등의 식별자에 공백 문자를 포함해서 써도 된다. CNT X 라고 적어도 잘 동작한다는 소리.[15] 반면 줄바꿈은 의미를 가진다.
루프의 사용하는 int i 의 기원이기도 하다. 포트란은 미리 변수들을 선언해 두었는데, 이때 i 부터 N 까지 int 형 이였다. ( 나머지는 실수형 ) 그래서 int 형의 첫번째 오는 i 가 루프의 인덱스로 쓰이기 시작한 것이다.
최신 IDE 중에서는 CLion이 플러그인을 통해 Fortran을 잘 지원한다.
[1] http://www.nag.co.uk/sc22wg5 [2] http://www.j3-fortran.org [3] 홀러리스식은 FORMAT 문과 문자열상수에 H표시를 이용한 기법이다. 허먼 홀러리스의 이름을 땄다. 현재 이 홀러리스 표현은 의미가 없지만.. 아직도 멋 모르고 사용하는 습관을 가지고 있는 사람들이 많이 있고, 그런 오래된 코드들과 정신적 교감을 나누며 코딩 고고학을 지향하는 일들이 벌어지고 있다. 영문 위키백과 참조. [4] ftp://ftp.nag.co.uk/sc22wg5/ARCHIVE/mil_std_1753.html[5] Fortran2008에 추가된 Do Concurent를 "제대로 된 Forall"로 여기면 된다.[6] http://en.wikipedia.org/wiki/Fortran_95_language_features[7] 아직 표준이지만, 앞으로의 표준에서 삭제될 것을 미리 알리는 것. 다른 언어의 deprecated를 의미[8] 과거의 표준이었지만, 현재는 지워진 표준[9] 포트란을 많이 사용하는 사용자들에게 대안은 속도 문제로 C나 C++밖에 없다.[10] https://en.wikipedia.org/wiki/Restrict[11] https://en.wikipedia.org/wiki/Pointer_aliasing#Aliasing_and_re-ordering[12] https://lwn.net/Articles/255364[13] 해외는 수치해석, 슈퍼컴퓨터 분야에서 포트란이 여전히 흔들림이 없는 강자의 위치에 있다.[14] Ada도 많이 사용한다.[15] 덕분에 컴파일러 만들기가 힘들어진다.