IDL(프로그래밍 언어)
IDL (programming language)패러다임 | 벡터 지향 프로그래밍 |
---|---|
설계자 | 데이비드 스턴 |
개발자 | David Stern & ITT Visual Information Solutions (ITT VIS) |
처음 등장한 | 1977 |
안정된 릴리스 | IDL 8.8.2 / 2022년 3월 |
타이핑 분야 | 역학 |
웹 사이트 | www |
주요 구현 | |
IDL, GNU 데이터 언어, 폴티 언어 |
IDL(Interactive Data Language)은 데이터 분석에 사용되는 프로그래밍 언어입니다.그것은 천문학, 대기 물리학, 의학 [citation needed]영상과 같은 과학의 특정 분야에서 인기가 있다.IDL은 PV-Wave와 공통 구문을 공유하며 동일한 코드베이스에서 발신됩니다.다만, 이 언어들은 그 후에 상세하게 분산됩니다.GNU Data Language(GDL; 데이터 언어)나 Follty Language(FL; 폴티 언어)와 같은 무료 또는 비용이 들지 않는 구현도 있습니다.
개요
IDL은 벡터화, 수치화 및 인터랙티브한 것으로, 일반적으로 대량의 데이터(이미지 처리 포함)의 인터랙티브 처리에 사용됩니다.이 구문에는 Fortran의 많은 구성 요소와 C의 구성 요소가 포함되어 있습니다.
IDL은 초기 VMS Fortran에서 시작되었으며, 구문은 여전히 IDL의 유산을 나타냅니다.
x = findgen(100)/10 y = sin(x)/x 그림,x,y
그위 예제의 findgen 함수는 0에서 시작하는 일련의 정수와 동일한 값을 가진 부동 소수점 번호의 1차원 배열을 반환합니다.
두 번째 줄의 연산은 첫 번째 줄에서 작성된 100개의 요소 배열 전체에 벡터화된 방식으로 적용되며, 이는 범용 배열 프로그래밍 언어(APL, J 또는 K 등)가 수행하는 방식과 유사합니다.이 예에는 0으로 나눗셈이 포함되어 있습니다.IDL은 산술 오버플로를 보고하고 Y 배열의 대응하는 요소(첫 번째 요소)에 NaN 값을 저장합니다.단, 다른 배열 요소는 유한합니다.NaN은 플롯 명령에 의해 생성된 시각화에서 제외됩니다.
대부분의 다른 어레이 프로그래밍 언어와 마찬가지로 IDL은 벡터 연산을 매우 빠르게 실행할 수 있지만(때로는 Fortran 또는 C의 잘 코딩된 커스텀 루프만큼 빠릅니다), 요소가 개별적으로 처리해야 하는 경우에는 상당히 느립니다.따라서 IDL(또는 그 문제에 관한 다른 배열 프로그래밍 언어)을 사용하는 기술의 일부는 내장된 벡터 연산을 사용하는 것입니다.
역사
![]() |
IDL의 이전 버전은 1970년대에 볼더에 있는 콜로라도 대학의 대기 및 우주 물리학 연구소(LASP)에서 개발되었습니다.LASP에서 David Stern은 개별 애플리케이션을 작성하거나 수정하기 위해 프로그래머를 고용하지 않고도 과학자들이 가설을 테스트할 수 있도록 하는 노력에 참여했습니다.Stern이 개발한 IDL로의 진화 사슬의 첫 번째 프로그램은 Rufus로 명명되었습니다.이것은 PDP-12에서 실행되는 단순한 벡터 지향 계산기입니다.산술 연산을 지정하는 2글자 코드, 오퍼랜드로 기능하는 입력 레지스터 및 수신처 레지스터를 받아들였습니다.PDP-8에서 개발된 루퍼스의 버전은 Mars Mariner Spectrum Editor(MMED)였다. MMED는 LASP 과학자들이 Mariner 7과 Mariner 9의 데이터를 해석하는 데 사용되었다.나중에 스턴은 SOL이라는 이름의 프로그램을 작성했는데, 이 프로그램은 PDP-8에서도 실행되었다.이전 버전과 달리, FORTRAN과 유사한 구문을 가진 진정한 프로그래밍 언어였습니다.SOL은 몇 가지 원시적인 그래픽 기능을 [1]갖춘 어레이 지향 언어입니다.
스턴은 1977년 LASP를 떠나 Research Systems Inc.(RSI)를 설립했다.최초의 RSI 제품은 PDP-11의 [1]IDL이었습니다.이 릴리스에서 IDL에서 지원되는 그래픽은 주로 Tektronix 터미널과 래스터 그래픽 디스플레이였습니다.RSI는 1979년에 첫 번째 IDL 면허를 NASA의 고다드 우주 비행 센터와 Ball Aerospace & Technologies사에 팔았다.2년 후 RSI는 VAX 매크로와 FORTRAN으로 작성된 IDL의 초기 VAX/VMS 버전을 출시했습니다.VAX 가상 메모리와 32비트 주소 [1]공간을 활용했습니다.국립대기연구센터(NCAR), 미시간대, 콜로라도대, 해군연구소는 이 버전에서 IDL을 사용하기 시작했다.
1987년에 RSI는 IDL의 개발 작업을 Unix 환경으로 전환했습니다.이 경우 기존 버전의 VAX IDL 포트가 아닌 C에서 코드를 완전히 다시 작성해야 했습니다.Stern과 Ali Bahrami는 언어를 확장하고 개선하기 위해 Unix용 IDL을 Sun 3에서 다시 작성했습니다.그 후 IDL은 Unix, VMS, Linux, Microsoft Windows(1992년) 및 Mac OS(1994년)의 여러 변종으로 확장 및 이식되었습니다.
1992년 IDL에 위젯이 추가되어 그래픽 사용자 인터페이스를 통한 이벤트 중심 프로그래밍이 제공되었습니다.1997년 웹 서버 기반 시스템인 ION(IDL On the Net)이 상용 출시되었습니다.IDL로 작성된 원격감지 멀티 스펙트럼 및 하이퍼 스펙트럼 이미지 분석 애플리케이션인 ENVI의 첫 버전은 1994년에 출시되었습니다.ENVI는 Better Solutions Consulting, LLC에 의해 설립, 개발 및 소유되었으며, 2000년 10월 Eastman Kodak이 RSI 구입과 동시에 BSC, LLC와의 라이센스 계약 조건에 따라 ENVI를 판매, 마케팅 및 지원했습니다.1997년 IDL에 새로운 객체 및 포인터 유형, 제한된 객체 지향 프로그래밍 기능이 추가되었습니다.
IDL은 우주 과학, 예를 들어 태양 물리학에서 널리 적용되어 왔다.유럽우주국은 지오토 우주선이 촬영한 핼리 혜성의 거의 모든 사진을 처리하기 위해 IDL을 사용했다.허블 우주 망원경을 수리하는 팀은 IDL을 사용하여 주 거울의 이상을 진단했습니다.1995년, 우주왕복선에 탑승한 우주비행사들은 노트북에 탑재된 IDL을 자외선을 연구하기 위해 사용했다.현재 IDL은 미국 NRL과 영국 Rutherford Appleton Laboratory에서 STEREO 미션의 SECHI 부분 분석에 대부분 사용되고 있습니다.
RSI는 2004년 3월에 ITT Industries의 완전 자회사가 되었습니다.2006년 5월 15일부터, RSI는 ITT Visual Information Solutions로서 비즈니스를 개시했습니다.2011년 10월 31일자로 구조조정의 결과로 그 회사는 Exelis Visual Information Solutions가 되었습니다.2015년 현재[update] IDL은 Harris Geospatial Solutions가 소유하고 관리하고 있습니다.
특징들
컴퓨터 언어로서 IDL:
- 는 동적으로 입력됩니다.
- 에는 변수, 함수 및 프로시저를 위한 별도의 네임스페이스가 있지만 네임스페이스 계층은 없습니다.
- 는 원래 싱글 스레드였지만 현재는 많은 멀티 스레드 기능과 프로시저를 갖추고 있습니다.
- 에는 모든 함수 인수가 참조에 의해 전달되고 있습니다.단, 아래의 "functions"를 참조해 주세요.
- 에는 참조에 의해 전달되는 키워드라는 이름의 파라미터가 있습니다.
- 는 참조 또는 값에 따라 네스트된 루틴콜의 이름 있는 파라미터 상속을 제공합니다.
- 는 변수를 선행시킬 필요가 없습니다.
- 는 루틴 간에 글로벌 값을 공유하기 위한 COMMON 블록 선언 및 시스템 변수를 제공합니다.
- 는 오퍼레이터 오버로드와 함께 Smalltalk와 다소 유사한 객체 지향 프로그래밍의 기본 형식을 제공합니다.
- 는 가비지 컬렉션에 참조 카운트를 사용하여 포인터와 오브젝트 변수의 영속적인 글로벌히프를 구현합니다.
- 는 해석된 스택 기반의 중간 p-code(Java 가상 머신)로 컴파일합니다.
- 는 대규모 어레이에서 데이터를 추출하기 위한 간단하고 효율적인 인덱스 슬라이스 구문을 제공합니다.
- 는 다양한 정수 크기, 단정도 및 배정도 부동소수점 실수 및 복소수 값을 제공합니다.
- 는 문자열, 동종 유형 배열, 목록, 해시 테이블 및 혼합 데이터 유형의 단순(비표준) 레코드 구조 등의 복합 데이터 유형을 제공합니다.
문제
![]() |
IDL을 인터랙티브하게 사용하기 쉽게 하는 이러한 기능 중 일부는 대규모 프로그램 구축 시에도 어려움을 일으킵니다.단일 네임스페이스는 특히 문제가 됩니다.예를 들어 새로운 내장 함수를 포함하는 언어 업데이트로 인해 대규모 과학 [2]라이브러리가 무효화되기도 합니다.
어레이는 참조에 의해 전달되며, 이 메커니즘은 서브루틴에서 데이터를 되돌리는 언어의 애드버타이즈된 기능입니다.반대로 어레이 슬라이스는 전달되기 전에 복사되므로 데이터 수정이 어레이 범위(서브루틴 종료 후)로 역류하지 않기 때문에 놀라지 않습니다.
많은 역사적 부정 행위들이 언어의 초기 유산으로부터 살아남아 프로그래머에 의한 개별적인 회피책을 필요로 한다.예를 들어 다음과 같습니다.
- 배열 인덱싱과 서브루틴 엔트리는 모두 정확히 동일한 구문(부모)을 사용하여 실행할 수 있습니다.이러한 모호성과 모든 변수 및 서브루틴에 대한 단일 네임스페이스가 결합되어 새로 정의된 서브루틴 또는 언어 확장자가 로컬 변수 이름과 충돌할 때 코드가 작동하지 않을 수 있습니다.IDL 프로그래머는 어레이 인덱싱을 위해 대괄호를 사용함으로써 이러한 문제의 대부분을 방지할 수 있으며, 따라서 괄호를 사용하는 함수 이름과의 충돌을 방지할 수 있습니다.
위의 문제는 다음 컴파일러 옵션을 사용하여 해결할 수 있습니다.
컴파일_OPT STRICTARR
- IDL의 개발자인 ITT VIS(Visual Information Solutions)는 다른 환경과의 바이트 코드 호환성을 방지하기 위해 명확한 조치를 취했습니다.컴파일된 루틴이 포함된 파일에는 공식적으로 공개되지는 않았지만 사용자가 조사[3] 및 문서화한 바이너리 태그 부착 데이터 구조 형식이 사용되지만 저장된 각 파일에 포함된 ASCII 텍스트로서 다음과 같은 알림이 포함됩니다.IDL Save/Restore files 에는 IDL 프로그램에 대한 미공개 정보가 포함되어 있습니다.따라서 이 파일의 리버스 엔지니어링은 IDL 최종 사용자 라이센스 계약(IDL EULA)에 따라 금지됩니다.모든 IDL 사용자는 IDL을 설치할 때 IDL EULA의 조건을 읽고 동의해야 합니다.IDL 저장/복원 형식의 파일을 읽거나 쓰는 소프트웨어는 ITT Visual Information Solutions의 라이센스를 명시적으로 가지고 있어야 합니다.이 경우, 라이센스는 소프트웨어에 포함되어 검사를 실시합니다.이러한 라이센스가 없는 소프트웨어는 ITT Visual Information Solutions에 보고하십시오.2010년 2월[update] 현재 이 진술은 법정에서 검증되지 않았다.
또한 IDL EULA의 조항은 호주 저작권법 47D 및 47H조에 따라 효력이 없습니다.
예
IDL(소스 코드 포함)을 사용하여 작성된 그래픽은 다음과 같습니다.
- 최적 맞춤 라인과 다양한 스무딩이 있는 랜덤 데이터 + 추세 이미지
- 연령과 깊이에 대한 델타-o-18 플롯(EPICA 및 Vostok에서)
- 코요테 IDL 갤러리 IDL 이미징 예시
「 」를 참조해 주세요.
- 수치 분석 소프트웨어 목록
- ENVI – IDL에 내장된 이미지 처리 소프트웨어 패키지
- IRAF – NOAO에서 제공하는 무료 그래픽 데이터 감소 환경
- MATLAB – IDL과 동일한 기능을 제공하는 기술 컴퓨팅 환경
- NumPy – IDL과 유사한 어레이 연산 기능을 제공하는 Python 확장 기능
- Perl Data Language (PDL; Perl 데이터 언어)– IDL과 유사한 어레이 연산 기능을 제공하는 Perl 확장 기능
- Scilab - Scientific 컴퓨팅 및 인터페이스용으로 설계된 수치 지향 고급 프로그래밍 언어
- Solarsoft – 주로 IDL로 작성된 태양 데이터 분석 및 우주선 운영 활동을 위한 라이브러리
- GDL – GNU Data Language는 IDL과 유사한 무료 구현입니다.
- Fawlty Language – Fawlty Language는 IDL8(Interactive Data Language) 호환 컴파일러입니다.
레퍼런스
- ^ a b c d Schienle, Mike (1991-01-19). "IDL FAQ". Retrieved 8 February 2019.
- ^ Fanning, David. "Program Naming Conflicts in IDL 8". Archived from the original on 6 March 2014. Retrieved 30 September 2014.
- ^ Markwardt, Craig (2011-12-21). "Unofficial Format Specification of the IDL "SAVE" File". Retrieved 2013-02-13.