- IDL (programming language)
Infobox programming language
name = IDL (Interactive Data Language)
paradigm = vectorized
designer = David Stern
developer = David Stern & Research Systems, Inc. (RSI)
latest release version = IDL 7.0
latest release date =
IDL, short for interactive data language, is a
programming languagethat is a popular data analysis language among scientists.
IDL is vectorized, numerical, and interactive, and it is commonly used for interactive processing of large amounts of data (including
image processing). The syntax includes many constructs from Fortranand some from C.
IDL originated from early
VAX/VMS/Fortran, and its syntax still shows its heritage: x = findgen(100)/10 y = sin(x)/x plot,x,y(The findgen function in the above example returns a one-dimensional array of floating point numbers, with values equal to a series of integers starting at 0.)
Note that the operation in the second line applies in a vectorized manner to the whole 100-element array created in the first line, analogous to the way general-purpose array programming languages (such as APL or J) would do it. This example contains a divide by zero; IDL will report an
arithmetic overflow, and store a NaNvalue in the corresponding element of the y array (the first one), but the other array elements will be finite. The NaN is excluded from the visualisation generated by the plot command.
As most other array programming languages, IDL is very fast doing vector operations (sometimes as fast as a well-coded custom loop in
FORTRANor C) but quite slow if elements need processing individually. Hence part of the art of using IDL (or any other array programming language, for that matter) for numerically heavy computations is to make use of the inbuilt vector operations.
The predecessor versions of IDL were developed in the 1970s at the
Laboratory for Atmospheric and Space Physics(LASP) at the University of Colorado at Boulder. At LASP David Stern was involved in efforts to allow scientists to test hypotheses without employing programmers to write or modify individual applications. The first program in the evolutionary chain to IDL that Stern developed was named Rufus, a simple vector-oriented calculator that ran on the PDP-12. It accepted two-letter codes that specified an arithmetic operation, the input registers to serve as operands, and the destination register. A version of Rufus developed on the PDP-8was the Mars Mariner Spectrum Editor (MMED). MMED was used by LASP scientists to interpret data from Mariner 7and Mariner 9. Later, Stern wrote a program named SOL, which also ran on the PDP-8. Unlike its predecessors, it was a true programming language with a FORTRAN-like syntax. SOL was an array-oriented with some primitive graphics capabilities.
Stern left LASP to found Research Systems Inc. (RSI) in 1977. The first RSI product was IDL for the PDP-11. In this release, the graphics supported by IDL were primarily Tektronix terminals and raster graphics displays. RSI sold its first IDL licenses to NASA's
Goddard Space Flight Centerand Ball Aerospace & Technologies Corp.in 1979. Two years later RSI released an initial VAX/VMS version of IDL, which was written in VAX-11 MACRO and FORTRAN. It took advantage of the VAX virtual memory and 32-bit address space. The National Center for Atmospheric Research(NCAR), the University of Michigan, the University of Colorado, and the Naval Research Laboratorystarted to use IDL with this version.
In 1987 RSI shifted development work of IDL to the
Unixenvironment, which required a complete re-write of the code in C rather than a port of the existing version of VAX IDL. Stern and Ali Bahrami rewrote IDL for Unix on the Sun 3, taking advantage of the re-write to extend and improve the language. Subsequently, IDL was further expanded and ported to several variants of Unix, VMS, Linux, Microsoft Windows (1992), and Mac OS (1994).
Widgets were added to IDL in 1992, providing event-driven programming with graphical user interfaces. In 1997 ION (IDL On the Net), a web server-based system, was commercially released. The first version of ENVI, an application for
remote sensing multispectraland hyperspectralimage analysis written in IDL, was released in 1994. ENVI was created, developed and owned by Better Solutions Consulting, LLC, until it was purchased from BSC in October 2000 by Eastman Kodak coincident with their purchase of RSI. RSI sold, marketed and supported ENVI under the terms of a license agreement with BSC, LLC from 1994 through October, 2000. New object and pointer types, and limited Object-Oriented Programmingcapabilities were added to IDL in 1997.
IDL has been applied widely in space science. The
European Space Agencyused IDL to process almost all of the pictures of Halley's Comettaken by the Giottospacecraft. The team repairing the Hubble Space Telescopeused IDL to help them diagnose anomalies in the main mirror. In 1995 astronauts on board a space shuttle used IDL loaded on a laptop to study ultraviolet radiation. Currently, amongst other applications, IDL is being used for most of the analysis of the SECCHI part of the STEREOmission at NRL, USA, and at the Rutherford Appleton Laboratory, UK.
RSI became a wholly owned subsidiary of ITT Industries in March 2004. As of
May 15, 2006, RSI began doing business as ITT Visual Information Solutions.
As a computer language, IDL:
* has a single namespace.
* was originally single threaded but now has many multi-threaded functions and procedures.
* has all function arguments passed by reference ("
IN-OUT"); but see "problems", below.
named parameters called keywords which are passed by reference.
* provides named parameter inheritance in nested routine calls, by reference or value.
* does not require variables to be predeclared.
* provides only COMMON block declarations to share global values among routines.
* provides a basic form of object-oriented programming, somewhat similar to Smalltalk.
* implements a persistent, global heap of pointer and object variables.
* compiles to an interpreted, stack-based intermediate p-code (à la
* provides a simple and efficient index slice syntax to extract data from large arrays.
* provides various integer sizes, as well as single and double precision floating point real and complex numbers.
* provides composite data types such as character strings, homogeneous-type arrays, and simple (non-hierarchical) record structures of mixed data types.
Some of these features, which make IDL very simple to use interactively, also cause difficulties when building large programs. The single namespace is particularly problematic in those cases, although object oriented methods can alleviate some of this difficulty.IDL also lacks empty arrays, variable-sized dynamic arrays (lists), and nested arrays (that is, arrays of arrays are not permitted).The object-oriented features of the language require that the programmer be responsible for managing memory allocation/deallocation.
Arrays are passed by reference, and this mechanism is an advertised feature of the language to pass data back out of a subroutine -- but array slices are copied before being passed, so that data do not flow back into array ranges, violating the
principle of least surprise.
The syntax lacks a
foreachstatement for looping over array elements, requiring instead the following more verbose syntax: num = n_elements(myarray) for index = 0, num-1 do begin myvalue = myarray [index] "...other code..." endfor
Many historical irregularities survive from the early heritage of the language, requiring individual work-arounds by the programmer. Dynamic typing does not include automatic promotion-on-overflow; one consequence is that (
for loops) built in the usual way may fail on the 32,768th iteration, unless the iteration variable is explicitly initialized with a longer integer type. Another solution is to define the default type for all integers to 32-bit unsigned (this can be done at startup, or embedded in source code), or by specifying the lower loop bound as a "long" (32-bit) number (e.g. for i=0L,40000). Array indexing and subroutine entry can both be carried out with exactly the same syntax (parentheses); this ambiguity, coupled with the single namespace for all variables and subroutines, can cause code to stop working when newly defined subroutines or language extensions conflict with local variable names. IDL programmers can avoid many of these problems by using square brackets for array indexing, thereby avoiding conflicts with function names which use parentheses. This behavior can also be required using compiler directives.
RSI, the developers of IDL, have taken explicit steps to prevent data compatibility with other environments. Data files saved with the default format use a simple tagged-data-structure format that has been [http://cow.physics.wisc.edu/~craigm/idl/savefmt.pdf documented and published] , but also contain the following notice: "IDL Save/Restore files embody unpublished proprietary information about the IDL program. Reverse engineering of this file is therefore forbidden under the terms of the IDL End User License Agreement. ... Non-RSI supplied software that reads or writes files in the IDL Save/Restore must have a license from Research Systems explicitly granting the right to do so. ..."
The following graphics were created with IDL (source code included):
List of numerical analysis software
GNU data language(GDL) - a GNU IDL clone
Fawlty Language(FL) - another IDL clone (closed source, but freely usable)
IRAF- a free, graphical data reduction environment produced by NOAO
* [http://www.ittvis.com ITT Visual Information Solutions] , owner of the IDL system
* [news://comp.lang.idl-pvwave idl-pvwave newsgroup] ( [http://groups.google.com/group/comp.lang.idl-pvwave Google web interface] )
* [http://idlastro.gsfc.nasa.gov/idl_html_help/home.html NASA GSFC IDL Online Help]
* [http://web.interware.hu/fl/ FL (Fawlty language) web page]
* [http://www.dfanning.com/ Coyote's Guide to IDL Programming]
Wikimedia Foundation. 2010.