학습의 용이성
Python과 Fortran은 비교적 배우기 쉬운 언어입니다. Python이 더 널리 사용되며 Fortran은 현재 수치 컴퓨팅의 "전문"언어로 간주되기 때문에 우수한 Fortran 학습 자료보다 우수한 Python 학습 자료를 찾는 것이 더 쉽습니다.
파이썬에서 포트란으로의 전환이 더 쉬울 것이라고 생각합니다. 파이썬은 해석 된 언어이므로 첫 프로그램을 실행하는 데 걸리는 단계의 수는 print("Hello, world!")
Fortran ( "Hello world"프로그램 작성, 컴파일, 실행) 보다 작습니다 (인터프리터 열기 , 프롬프트 입력 ). 또한 Fortran보다 Python에서 객체 지향 스타일을 가르치는 데 더 좋은 자료가 있으며 GitHub에서 Fortran 코드보다 더 많은 Python 코드를 사용할 수 있다고 생각합니다.
Windows에서 시작 및 실행
파이썬 설치는 덜 고통 스럽습니다. 사용 가능한 Windows 배포판이 있습니다. Anaconda 또는 Enthought Canopy와 같은 과학적 배포판을 사용하는 것이 좋습니다. 실제로 컴파일러 자체는 없습니다. 통역사가 그 역할을 수행합니다. 사용 가능한 더 많은 숫자 라이브러리가 있으며 C, C ++ 및 Fortran과 잘 상호 작용하기 때문에 CPython 기반 인터프리터를 사용하려고합니다. 다른 인터프리터 구현에는 Jython 및 PyPy가 포함됩니다.
Windows 컴퓨터에서 Fortran 컴파일러를 설치하면 성 가실 것입니다. 일반적인 명령 행 컴파일러는 gfortran, ifort (Intel, 무료, 개인 비용, 기타 비용) 및 pgfortran (PGI, 무료 평가판 버전, 비용)과 같은 프로그램입니다. 이러한 컴파일러를 설치하려면 Cygwin 또는 MinGW와 같은 일종의 UNIX / POSIX 유형 호환성 계층을 설치해야합니다. 작업하기가 어려웠지만 일부 사람들은 그 워크 플로를 좋아합니다. Visual Fortran과 같은 GUI를 사용하여 컴파일러를 설치할 수도 있습니다 (다시 라이센스 비용을 지불해야 함).
리눅스에서는 파이썬과 컴파일러를 설치하는 것이 더 쉬울 것이다. 여전히 Anaconda 또는 Enthought Canopy를 Python 배포로 설치합니다.
속도 : 생산성 대 성능 균형
Python (또는 MATLAB, Mathematica, Maple 또는 기타 해석 된 언어)을 사용하면 생산성 향상을 포기할 수 있습니다. Fortran (또는 C ++, C 또는 기타 컴파일 된 언어)과 비교하여 동일한 작업을 수행하기 위해 더 적은 수의 코드 줄을 작성하므로 일반적으로 작업 솔루션을 얻는 데 시간이 덜 걸립니다.
파이썬 사용에 대한 효과적인 성능 저하는 다양하며 계산 집약적 인 작업을 컴파일 된 언어로 위임하여 완화됩니다. MATLAB은 비슷한 기능을 수행합니다. MATLAB에서 행렬 곱셈을 수행 할 때 BLAS를 호출합니다. 성능 불이익은 사실상 제로이므로 고성능을 얻기 위해 Fortran, C 또는 C ++을 작성할 필요가 없습니다. 파이썬에서도 비슷한 상황이 존재합니다. 라이브러리 (예 : NumPy, SciPy, petsc4py, FEniCS의 dolfin, PyClaw)를 사용할 수있는 경우 모든 코드를 Python으로 작성하고 계산 성능이 우수하므로 (10-40 %의 패널티) 집중적 인 부분은 빠르게 컴파일 된 언어 라이브러리를 호출하는 것입니다. 그러나 순수한 파이썬으로 모든 것을 작성한다면 성능 저하는 100-1000x의 요소가 될 것입니다. 파이썬을 사용하고 커스텀을 포함시켜야한다면 계산 집약적 인 루틴의 경우 C, C ++ 또는 Fortran과 같은 컴파일 된 언어로 해당 부분을 작성한 다음 Python 인터페이스로 래핑하는 것이 좋습니다. 이 프로세스를 용이하게하는 라이브러리 (Cython 및 f2py 등)와 자습서가 있습니다. 일반적으로 번거롭지 않습니다.
사용 범위
파이썬은 전반적으로 범용 언어로 널리 사용됩니다. Fortran은 주로 수치 및 과학 컴퓨팅으로 제한되며 주로 해당 도메인의 사용자를 위해 C 및 C ++와 경쟁합니다.
계산 과학에서 파이썬은 일반적으로 언급 한 성능 불이익으로 인해 컴파일 된 언어와 직접 경쟁하지 않습니다. 수치 집약적 인 알고리즘 프로토 타이핑, 데이터 처리 및 시각화와 같이 생산성이 높고 성능이 중요한 경우에는 Python을 사용합니다. 알고리즘과 응용 프로그램 디자인이 무엇인지 잘 알고 있고 코드를 작성하고 디버깅하는 데 더 많은 시간을 할애하고 성능이 가장 중요한 경우 포트란 (또는 다른 컴파일 된 언어)을 사용합니다. (예를 들어, 성능은 시뮬레이션 프로세스에서 제한적인 단계이거나 연구에서 제공 할 수있는 핵심 단계입니다.) 일반적인 전략은 Python과 컴파일 된 언어 (일반적으로 C 또는 C ++이지만 Fortran도 사용됨)를 혼합하는 것입니다. 코드의 성능에 가장 민감한 부분에만 컴파일 된 언어를 사용하십시오. 물론 개발 비용은 단일 언어의 프로그램보다 두 가지 언어의 프로그램을 작성하고 디버그하기가 더 어렵습니다.
병렬 처리 측면에서 현재 MPI-3 (MPI-3)에는 기본 포트란 및 C 바인딩이 있습니다. MPI-2 표준에는 기본 C ++ 바인딩이 있지만 MPI-3에는 없습니다. C 바인딩을 사용해야합니다. mpi4py와 같은 타사 MPI 바인딩이 있습니다. 나는 mpi4py를 사용했다; 잘 작동하고 사용하기 쉽습니다. 대규모 병렬 처리 (수만 개의 코어)의 경우 Python 모듈을 동적으로로드하는 것과 같은 일이 순진한 방식으로 수행되면 대규모로 엉덩이에 물릴 수 있으므로 컴파일 된 언어를 사용하고 싶을 것입니다. PyClaw 개발자가 시연 한 것처럼 병목 현상을 피할 수있는 방법이 있지만 피하는 것이 더 간단합니다.
개인적인 의견
저는 Fortran 90/95에서 약 10 년의 경험을 가지고 있으며 Fortran 2003에서도 프로그래밍했습니다. 파이썬에서 약 5 년의 프로그래밍 경험이 있습니다. 솔직히 말하면 파이썬에서 더 많은 일을하기 때문에 나는 포트란을 사용하는 것보다 훨씬 더 파이썬을 사용합니다. 내가해야 할 대부분의 작업에는 주요 슈퍼 컴퓨팅 리소스가 필요하지 않으며 일반적으로 다른 언어로 다시 개발할 가치가 없으므로 Python은 ODE 및 PDE를 해결하는 데 적합합니다. 컴파일 된 언어를 사용해야하는 경우 C, C ++ 또는 Fortran을 순서대로 사용합니다.
내가 본 Fortran 코드의 대부분은 추악한 데, 주로 대부분의 컴퓨터 과학 커뮤니티가 지난 30 년 동안 소프트웨어 엔지니어가 발견 한 모범 사례를 인식하지 못하거나 회피하는 것처럼 보이기 때문입니다. 다시 말해 : 포트란에는 좋은 단위 테스트 프레임 워크가 없습니다. (내가 찾은 가장 좋은 것은 NASA의 FUnit이며 더 이상 유지되지 않습니다.) 몇 가지 좋은 Python 단위 테스트 프레임 워크, 좋은 Python 문서 생성기 및 일반적으로 좋은 프로그래밍 실습에 대한 더 좋은 예가 있습니다.