검수요청.png검수요청.png

포트란

위키원
kskim5223 (토론 | 기여)님의 2020년 8월 4일 (화) 10:30 판 (활용)
이동: 둘러보기, 검색
포트란(Fortran) 로고
포트란(Fortran) 로고와 글자

포트란(Fortran)은 1954년에서 1957년경 미국 IBM에서 개발한 공학용 프로그래밍 언어 이다. 어셈블리어 를 자동화한다는 개념에서 발생된 포트란은 프로그래밍 작업을 쉽고 간편하게, 그리고 효율성을 높여 만들어졌다. 최초의 실용적인 고급 프로그래밍 언어였으며 이때 완성된 컴파일러는 IBM 704에서 처음 작동되었다. 포트란(Fortran)은 수식을 뜻하는 포뮬러(Formula)와 변환기라는 뜻의 트랜스레이터(Translator)를 합성하여 만든 말이다. 과학 알고리즘을 위해 설계되었으며 공학자와 수학자들이 고성능 계산 작업을 위해 대부분 사용한다. 최초의 제3세대 고급 언어였으나, 이후 C, Java 등의 언어로 대체되어 거의 사용되지 않고 있다.

개요

포트란(Fortran)은 1954년 IBM 704에서 과학적인 계산을 하기 위해 시작된 컴퓨터 프로그램 언어이다. FORTRAN은 수식(Formula) 변환기(Translation)의 약자이다.(IBM Mathematical Formula Translating System에서 유래.) 포트란은 알골과 함께 과학 계산용으로 주로 사용되는 언어이며, 당시 7명의 전문가가 약 2년 반 동안에 걸쳐 완성한 것이 포트란의 기본을 이루었고, 그 후 ANSI와 ISO에서 표준화하였다. 포트란은 산술 기호(+, -, *, / 등)를 그대로 사용할 수 있으며, 삼각함수·지수함수·대수함수 등과 같은 기초적인 수학 함수들을 자연스럽게 불러내어 쓸 수 있으며, 최근 첨단 과학계산에서 필수적인 벡터, 행렬계산기능 등이 내장되어 있는 과학 기술 전문언어이다. 포트란은 기후 및 기상예측, 자원탐사, 우주항공, 유체 및 구조해석, 계산화학, 양자 및 분자 동역학 계산, 천문학, 인공위성을 포함한 군사과학, 자동차 선박 설계, 반도체설계, 금융계산 등 거의 모든 산업분야의 초대형 과학계산 문제의 프로그래밍에 필수적인 언어이다. 위와 같이 특히 자연과학이나 공학에서의 중요한 거대한 계산문제들을 슈퍼컴퓨터들을 이용하여 해결하는 데 있어서 C언어와 같이 범용프로그래밍 언어에 속하는 프로그래밍언어들에 비해 탁월한 효율이 있는 과학계산 전문 언어이다. 1990년대까지 널리 사용되어 왔던 FORTRAN 77에서 현재 Fortran 90/95, Fortran 2003, Fortran 2008등으로 계속 진보하고 있다. 전문적인 과학계산 문제를 풀기 위하여 프로그래밍하는 데 있어서 C보다 포트란이 훨씬 간단 명료하고 신속하게 프로그래밍을 작성할 수 있으며, 디버깅하는 데도 시간이 현저하게 단축될 뿐만 아니라, 그 계산속도 또한 일반적으로 훨씬 빠르다.[1]

등장배경

존 배커스는 수학적 대수식을 컴퓨터 프로그래밍에 바로 사용하고 싶어 했고, 그 결과 30여명의 연구원과 함께 포트란컴파일러 개발에 들어갔다. 후에 메인프레임머신에 사용할 프로그래밍 언어로 어셈블리어에 대한 대체 언어였다. 최초의 테스팅은 웨스팅하우스 부설 원자력연구소에서 실시되었으며 포트란컴파일러는 미세한 프로그래밍 실수까지 검사하였으며 실행 시간이 길지 않았다. 이후 수정 사항을 거쳐 포트란2, 1958년에 포트란3, 1962년에는 포트란4까지 세상에 나오게 되었다. 이후 포트란의 성능은 알려지게 되었고 1997년, 포트란 언어의 표준화에 대해 국제회의가 열리게 되었다. 수정 사항을 거쳐 표준화된 포트란77이 나오게 되었고, 이러한 프로그램의 사용자들은 어셈블리어의 번거로운 과정을 거치지 않아도 되었다.[2]

  • 1966.03.07 - Fortran66 / ASA(현재의 ANSI)에 의한 표준화.
  • 1978.04.15 - Fortran77 / 고정된 양식.
  • 1991.06.15 - Fortran90 / 자유 형식 ISO 표준, 배열 연산.
  • 1997.06.15 - Fortran95 / 순수 및 원소 과정.
  • 2004.04.04 - Fortran2003 / 객체 지향 프로그래밍.
  • 2010.09.10 - Fortran2008 / 공동 배열 [3]

특징

산술 기호를 그대로 사용할 수 있으며, 삼각함수·지수함수·대수함수 등과 같은 기초적인 수학 함수들을 그대로 불러내어 쓸 수 있다. 또 실수만이 아니라 복소수를 그대로 변수 형으로 쓸 수 있다. 물론 이러한 장점은 현재의 각종 프로그래밍 언어에서는 표준 라이브러리 등을 통해서 기본적으로 제공되는 기능이지만, 당시에는 굉장히 획기적인 방법이었다. 배열에 대해서도 많이 지원해 줘서, 옛날에 나온 언어임에도 불구하고 MATLAB에서처럼 쉽게 배열을 다룰 수 있다. 기본적으로 절차적 프로그래밍(procedural programming)이지만 90, 2003을 거치면서 OOP의 요소를 많이 넣게 되었다. 하지만 하위호환을 유지해야 하므로 아무래도 C++에 비해서는 문법적/구조적으로 불편한 부분이 많다. C와의 큰 차이점 중 하나로 배열의 배치 순서가 서로 다르다. C는 Row-Major Order를 따르며, Fortran은 Column-Major Order를 따른다. C에서는 (1,1) 다음이 (1,2)이지만, 포트란에서는 (2,1)가 된다. 따라서 다른 언어와 함께 프로그래밍을 할 때는 변수를 넘겨줄 때 순서를 바꾸어 주어야 한다. 또한 반복 계산을 할 때 가장 처음 인수부터 돌려 줘야 성능의 저하가 없다. 또한, 배열의 시작 숫자가 0이 아닌 1부터 시작이다. 사용자가 배열의 인덱스를 조정하는 것이 가능한 것은 포트란의 특징 중 하나이다. 배열의 인덱스를 -100 ~ 100처럼 지정하는 것이 가능하다. 초기 버전은 대문자만 인정했기 때문에 가독성이 부족하다. 그 이유는 키보드가 없던 시절 천공 카드로 프로그램을 입력해야 했는데 여기엔 소문자가 없었기 때문이다. 학교 교육은 다음과 같다. 서울대학교 수리과학부나 통계학과, 연세대학교 이과대학, 경희대학교 우주과학과와 원자력공학과, 서울시립대학교 토목공학과, 부산대학교 조선해양공학과, 부경대학교 환경대기과학과, 한국항공대학교 항공우주 및 기계공학과, 한국해양대학교 공과대학, 홍익대학교 기계시스템 디자인공학과 수치해석과목, 경북대학교 토목공학과와 지구시스템과학부 천문대기과학전공, 안동대학교 기계공학과, 한양대학교 ERICA캠퍼스 소프트웨어학부 수치해석 과목 등이 존재한다.[4]

활용

1980년대 이후로 일반 목적의 개발에서는 거의 사용되지 않는다. 허나 수치해석에 특화해 개발하였고, 그에 맞춘 라이브러리를 가지고 있기에 많은 계산을 해야 하는 특정 분야(학술 또는 연구 용도)에는 중요한 언어로 아직 사용하고 있다. MATLAB, 매스매티카 같은 수치계산 프로그램이 있으나, 대기과학 분야에서는 많은 계산과 다른 언어보다 빠르고 간단한 포트란을 주요하게 사용하고 있다. 포트란은 산술 기호를 그대로 사용할 수 있으며 또한 기초적인 수학 함수 또한 사용 가능하기에 수학/과학적인 수치 계산을 하는 데에 적합한 프로그램 언어다. 주로 기후 예측 등 첨단 과학 계산을 다루는 과학 기술 전문언어다.[5]

포트란은 과학 계산용 언어를 목표로 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를 굳이 에러를 무릅 써가며 다른 프로그래밍 언어로 변환할 필요는 없다. 그런 행동을 하려고 시간을 쓰다가 지도교수한테 걸리면 바로 뒷통수 스매싱 당하면서 "그냥 기존에 있는 포트란 가져다 써 XX" 란 말을 듣는다. 자신이 포트란과 다른 언어 둘 다 아주 잘 한다면 지도교수에게 안 걸리게 변환해보라. 가끔 오래된 팜탑 PC (휴렛팩커드의 200LX나 IBM의 PC110 등)에다가 포트란 컴파일러 깔고 공학용 계산기 대신으로 쓰는 괴인들도 존재한다. 다만 요즘은 대학교에서도 학원에서도 포트란을 가르치는 곳이 거의 없기 때문에 (심지어 책도 거의 없다) 적어도 한국에서는 잊혀진 언어 취급을 받게될 날이 멀지 않았다. 데이터베이스 프로그램이 코볼을 대체했듯이 포트란 역시 대부분의 경우에는 MATLAB, 매스매티카 같은 강력한 수치계산 프로그램들에게 자리를 내주고 있다. 하지만 포트란 컴파일러는 gnu 에서 무료로 배포하는 대신 매틀랩, 매스매티카는 상용 프로그램이라 완벽하게 대체하기는 힘들다. 실제로 물리학 전공자가 컴퓨터공학 전공자에게 이 언어에 대해서 이야기하면 컴퓨터공학 전공자는 '역사 속으로 사라진 줄 알았던 언어가 아직도 활발히 쓰이고 있다니!'하면서 놀라는 경우가 있다.

전망

포트란은 당시 주목을 받았던 프로그래밍 언어다. 그 시대에 FACT코볼이라는 사무용 언어가 생겨났다. FACT포트란보다 문서 작성 능력이 우수했으며 대용량 데이터도 처리하기 수월했으나 코볼에 밀려 사라지게 되었다. 포트란코볼과 비교하여 매우 간결함을 예로 들 수 있다. 기상청과 같은 기후, 과학에 관련된 계산을 할 때는 아직 포트란을 사용중이다. 방대한 데이터를 빠르게 처리하고, 그만큼 라이브러리가 쌓인 포트란을 쉽게 바꾸지는 못할 것이다.

각주

  1. 포트란 위키백과 - https://ko.wikipedia.org/wiki/%ED%8F%AC%ED%8A%B8%EB%9E%80
  2. 조환규, 《컴퓨터 이야기》, 1992-04-01
  3. Fortran 시작하기, <{https://riptutorial.com/ko/fortran Fortran]> , 《?》 2015.00.00
  4. 포트란 나무위키 - https://namu.wiki/w/%ED%8F%AC%ED%8A%B8%EB%9E%80
  5. [1] 기상청날씨마루〉

참고 자료

같이 보기


  검수요청.png검수요청.png 이 포트란 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.