Interactive Data Language
IDLはベクトル化された数値を扱う対話型の言語であり、大量のデータを対話的に処理するのに使うのが一般的である(例えば画像処理など)。構文はFORTRANに近く、一部C言語に似ている。
IDL はVAX/VMSのFORTRANから発祥しており、構文にもその痕跡がある。
ここで、findgen という関数は浮動小数点数の1次元の配列を返すもので、その値は0から始まる整数の列と同じである。
上の例で2行目はベクトル化された処理を行っており、1行目で生成された100要素の配列全体を処理している。これは汎用の配列プログラミング言語(APLやJ)と似ている。この例ではゼロ除算も含まれている(x の先頭の要素が0であるため)。その場合IDLは算術オーバフローを通知するが、配列 y の対応する箇所(先頭)には NaN を格納して処理を続行する。NaN は3行目の plot コマンドで描画する際には無視される。
他の多くの配列プログラミング言語と同様、IDLのベクトル操作は非常に高速だが(高度に最適化されたFORTRANやC言語のループに匹敵する)、配列の各要素に個別に処理をすると非常に遅くなる。従ってIDLを使うなら、大量のデータにベクトル処理を施す場合が適している。
IDLは対話的に利用する場合は便利だが、大規模なプログラムを構築するのが難しい。名前空間が単一である点も問題だが、オブジェクト指向機能を使えば問題を若干緩和できる。配列の配列(ジャグ配列)を作れないといった問題もある。
配列は参照渡しされ、サブルーチンで生成した配列を返すことが可能だが、渡す前に配列のコピーをして配列範囲から変数が溢れないようにしている。これは驚き最小の原則に反している。
出自が実用本位であるため、様々な過去のしがらみが残っており、プログラマがそれに個別に対処しなければならない。例えば、配列のインデックス指定とサブルーチン呼び出しは括弧も含めて全く同じ見た目にできる。この曖昧さと全ての変数やサブルーチンの名前空間が単一であることから、新たに変数やサブルーチンを追加する際は、名前が衝突しないかを毎回調べる必要がある。このため、配列のインデックス指定には角括弧を使うようにしているプログラマが多い。同様の配慮はコンパイラディレクティブを使う際にも必要となる。
IDLを開発したRSIは、他の環境とのデータ互換を防ぐ明示的措置をとっている。IDLがセーブするデータファイルのフォーマットは単純なタグ付きデータ構造であり、その詳細は非公式に公表されている。しかし、そこには次のような文言がある。「IDLのセーブ/リストアファイルはIDLプログラムの公表されていない独自情報である。従って、このファイルのリバースエンジニアリングはIDLのエンドユーザーライセンス契約に違反する可能性がある。...RSI以外が提供するソフトウェアがこのファイルの読み書きをする場合、RSIとのライセンス契約が必要である。...」