문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 포트란 (문단 편집) === 속도 논쟁 === [[물리학]] 커뮤니티에서 종종 볼수 있는 만년 떡밥. [[수치해석]]에 있어서 포트란을 사용하는 것이 항상 좋다는 이야기는 아니지만, Fortran 77의 역량을 맘껏 발휘할 수 있는 알고리즘을 돌릴 경우 C++의 2배 정도의 속도를 낸다. [[http://www.cs.rpi.edu/~szymansk/OOF90/performance.html|참조]] 역량을 발휘할 수 있는 예로는 재귀적 호출을 쓰지 않고 해결할 수 있는 종류가 있다. 포트란은 원래 [[재귀함수]]를 지원하지 않았다. 재귀함수를 호출하면 그때마다 필요한 오버헤드를 수행해야 하고, [[스택]]에 있는 변수를 참조할 때 한다리 건너 간접적으로 접근해야 하는 등 속도에 불리한 점이 있다. 포트란의 속도가 빠른 이유가 바로 이것. 90 표준에서는 재귀함수를 지원하지만, 사용에 주의를 요한다. 물론 복잡한 자료구조를 가진 알고리즘을 짜야 할 경우, 포트란77로 짜다가 돌아버릴지도 모른다. 속도 차이가 생기는 원인은 언어의 컴파일러의 [[프로그램 최적화]], 또는 Application 프로그래머의 프로그래밍 최적화 문제다. 어떤 컴파일러가 어떤 문법을 어떤 Architecture에 맞게 최적화 해내는가를 고급 프로그래밍 언어의 레벨에서 결정될 수 없다. C와 Fortran 두 언어 모두 고급 프로그래밍 언어로 [[컴파일러]]에 의해 바이너리 코드로 변환되어야 한다. 즉, 엄밀히 말하자면 C가 포트란보다 빠른 게 아니라 C 컴파일러를 거친 프로그램이 포트란 컴파일러를 거친 프로그램보다 빠른 거다. C99 표준 발표 이전에 포트란이 (C에 대해 상대적으로)가진 최적화의 유일한 이점은 프로시저의 인수가 (pointer 또는 target 속성을 가지지 않는다면) 메모리가 오버랩되지 않음을 가정하므로 컴파일러의 입장에서 최적화된 코드를 생성하는데 적합했다는 것이다. C언어에서 C99 표준부터는 restrict keyword를 프로그래머가 명시하여 포인터가 가리키는 메모리 영역이 오버랩 될 수 있는지 그렇지 않은 지를 컴파일러에게 명시적, 선택적으로 알려줄 수 있도록 하여 해결하였다.[* [[https://en.wikipedia.org/wiki/Restrict]]][* [[https://en.wikipedia.org/wiki/Pointer_aliasing#Aliasing_and_re-ordering]]][* [[https://lwn.net/Articles/255364]]] 즉, 포인터 앨리어싱의 선택을 과거에는 각 컴파일러에서 컴파일 시 최적화 옵션을 통해 결정하였으나 현재는 언어의 문법 표준으로 포함하도록 하였다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기