수학과 과학 컴퓨팅에 중점을 둔 언어가되기 위해, 나는 항상 포트란 표준 라이브러리에 유용한 수학 루틴이 부족하다는 사실에 당황했습니다. 표준 편차와 평균을 계산하기 위해 최소한 루틴이 제공 될 것으로 예상하지만, 그렇지 않습니다. 특히 포트란 90의 도입과 모듈의 추가 (따라서 네임 스페이스 오염을 줄임)로 인해이 중요한 서비스 부족의 이유를 알 수 없습니다.
왜 그런지에 대한 당신의 지식을 듣고 싶습니다.
수학과 과학 컴퓨팅에 중점을 둔 언어가되기 위해, 나는 항상 포트란 표준 라이브러리에 유용한 수학 루틴이 부족하다는 사실에 당황했습니다. 표준 편차와 평균을 계산하기 위해 최소한 루틴이 제공 될 것으로 예상하지만, 그렇지 않습니다. 특히 포트란 90의 도입과 모듈의 추가 (따라서 네임 스페이스 오염을 줄임)로 인해이 중요한 서비스 부족의 이유를 알 수 없습니다.
왜 그런지에 대한 당신의 지식을 듣고 싶습니다.
답변:
FORTRAN이 개발되었을 때 코드 이식성과 같은 것은 없었습니다. 한 시스템의 FORTRAN 컴파일러가 다른 시스템의 컴파일러와 약간 다른 언어를 허용하는 것은 절대적으로 일상적인 일이었습니다. 가장 일반적인 변형은 이름 길이입니다. IBM 1130 FORTRAN은 5자를 허용하고 DEC-10은 6자를 허용했으며 CDC 6600 (첫 번째 기계, 첫 번째 실제 어셈블리 언어)은 7자를 허용했습니다. 언어에는 3 차원 배열이 필요했습니다. 최소한 하나의 미니 컴퓨터 (Varian 76?) FORTRAN은 7 차원 배열을 허용했습니다.
회사는 일상적으로 FORTRAN 언어를 확장하여 고객에게 더 매력적인 시스템을 만들었으며 확장 기능이 유사한 기능을 제공 할 수는 있지만 결코 동일하지는 않았습니다. 많은 컴파일러가 파일 I / O 및 오버레이 관리를위한 확장 기능을 제공했으며 결코 동일하지 않았습니다. 때때로 그들은 심지어 가까이하지 않았다.
한 기계에서 다른 기계로 프로그램을 포팅하는 FORTRAN-FORTRAN 변환은 매우 바쁜 코티지 산업이었으며,이를 수행 할 수있는 사람들은 항상 일자리를 찾을 수있었습니다. (저는 그러한 두 가지 전환 작업을 수행했습니다. 원본 Matuszek-Reynolds-McGehearty-Cohen "Star Trek"게임을 CDC 6600에서 DEC-10으로 포팅하는 데 도움을 주었으며 EKG 분석 프로그램을 Varian 76에서 TI 990으로 포팅했습니다. 그러한 프로젝트는 동일했습니다.)
몇몇 사람들이 시도했지만 이런 종류의 일은 "표준"라이브러리를 제공하는 것을 매우 어렵게 만들었습니다. IMSL 라이브러리는 가장 크지 만 소스 코드 형태로 제공되었으며 고객은 자신의 시스템에서 작동하도록해야했습니다.
또한 : FORTRAN 프로그래머는 수치 적 방법에 대한 합리적인 배경을 가지고 있어야합니다. 당시 지구상의 모든 FORTRAN 프로그래머는 숙제로 과제에 대한 평균 및 표준 편차를 수행하는 방법을 배웠습니다. 모든 FORTRAN 프로그래머는 학교에서 이분법과 Newton-Raphson 반복 (현재 "Newton 's Method"라고 함)을 배웠습니다. Runge-Kutta 방법은 일반적으로 rote에 의해 가르쳐졌으며, 당시 6 차 Runge-Kutta 통합자는 교과서의 예였습니다. (이후 사람들은 4 차 Runge-Kutta가 비용 효율성 곡선에서 "달콤한 지점"임을 알아 차 렸습니다.)
그리고 프로그래머는 작업을 변경하지 않고 컴퓨터를 거의 바꾸지 않았습니다. 이사를 간 프로그래머들은 새로운 시스템의 작동 방식을 배우고 그 차이를 파악하는 데 능숙해야합니다.
이 환경에서는 유능한 엔트리 레벨 FORTRAN 프로그래머가 수면 중에 작성할 수있는 "표준"STDDEV 코드를 거의 요구하지 않습니다.
개인적으로 나는이 사실이 MKL 라이브러리 때문이라고 생각합니다 . 고성능 수학 라이브러리를 찾고 있다면 MKL이 필요합니다. 그렇게 비싸지 않으며, 프로젝트에서 수학 컴퓨팅을 수행하는 실험실이 감당할 수 있습니다.
FORmulaTRANslation 언어는 자신 만의 수식을 쉽게 작성할 수 있도록 설계되었습니다. Fortran 90 이상에서 쓸 수 있는데 왜 Fortran이 평균 함수를 정의해야합니까?
xmean = sum (x) / max (size (x), 1)?