Interactive Data Language

Interactive Data Language (IDL)とは



Interactive Data Language (IDL)は、主に科学技術計算の分野で利用されるデータ分析に特化したプログラミング言語です。大量のデータを対話的に処理する能力に優れており、特に画像処理などの分野でその力を発揮します。構文はFORTRANに近く、一部C言語の影響も受けています。IDLは、ベクトル化された数値演算を効率的に行うことができ、配列全体を一度に処理するような操作が得意です。

IDLの特徴



ベクトル演算: 配列全体に対する演算を高速に実行できます。これは、高度に最適化されたFORTRANやC言語のループ処理に匹敵するほどの速度です。ただし、配列の各要素に個別に処理を行うと非常に遅くなるため、ベクトル処理を最大限に活用することが重要です。
対話型: IDLは対話型の言語であり、コマンドを一つずつ実行しながら結果を確認できます。これにより、データ分析のプロセスを効率的に進めることができます。
動的型付け: 変数を事前に宣言する必要がないため、柔軟なプログラミングが可能です。ただし、広域変数を宣言するためのCOMMONブロックは存在します。
柔軟なデータ型: 整数、浮動小数点数、複素数、文字列、配列ハッシュテーブル、リストなど、多様なデータ型を扱うことができます。また、これらのデータ型を組み合わせたレコード構造も利用可能です。
オブジェクト指向: 基本的なオブジェクト指向プログラミングが可能であり、Smalltalkに似た特徴を持っています。ポインタやオブジェクトは単一のヒープ領域で管理されます。IDL 8.0からはガベージコレクションもサポートされています。
引数の参照渡し: 関数の引数は参照渡しで行われます。キーワードと呼ばれる名前付きパラメータも参照渡しで渡され、サブルーチン呼び出しの入れ子において名前付きパラメータを継承できます。

IDLの歴史



IDLは、1970年代にコロラド大学ボルダー校の大気宇宙物理学研究所(LASP)で生まれました。デビッド・スターン氏が開発したRufusというシンプルなベクトル計算器がそのルーツです。その後、Rufusは改良され、Mars Mariner Spectrum Editor (MMED)やSOLといった言語に発展しました。1977年にスターン氏はResearch Systems Inc.(RSI)を設立し、PDP-11向けのIDLをリリースしました。この初期のIDLは、テクトロニクス製やラスターグラフィック端末をサポートしていました。

1980年代には、NASAのゴダード宇宙飛行センターやボール・エアロスペースにライセンスが販売され、VAX/VMS版のIDLがリリースされました。このVAX版IDLは、VAX-11 MACROとFORTRANで書かれており、仮想記憶と32ビットのアドレス空間を活用したものでした。

1987年には、UNIX版IDLの開発が始まりました。VAX版をそのまま移植するのではなく、C言語で完全に書き直されました。その後、Linux、Microsoft Windows、Mac OSなど、様々なプラットフォームに対応するようになりました。1992年には、ウィジェットが追加され、イベント駆動型のグラフィカルユーザインタフェースのプログラミングが可能になりました。

1997年には、Webサーバ上で動作するION(IDL On the Net)が商用リリースされ、1994年にはIDLで書かれたアプリケーションENVIがリリースされました。ENVIは、リモートセンシングにおけるマルチスペクトル画像やハイパースペクトル画像の処理ソフトです。

IDLは、宇宙開発関連で広く採用されており、ハレー彗星の画像の処理やハッブル宇宙望遠鏡の不具合調整などにも活用されました。

RSIはその後、ITTの完全子会社となり、名称を変更したのち、分社化を経てExelis Visual Information Solutionsとなりました。

IDLの問題点



IDLは対話的な利用には便利ですが、大規模なプログラムを構築するにはいくつかの課題があります。

単一の名前空間: IDLでは、すべての変数やサブルーチンの名前空間が単一であるため、名前の衝突を避けるために注意が必要です。オブジェクト指向機能を利用することで、この問題は若干緩和されますが、根本的な解決には至っていません。
ジャグ配列'>[配列]]の非対応: IDLでは、配列の[[配列]を作成することができません。
参照渡しの問題: 配列は参照渡しされますが、サブルーチンで生成した配列を返す際に、配列のコピーを行うことで、配列範囲からの変数の溢れを防ぐという処理が入ります。この仕様は、プログラマの直感に反する可能性があります。
過去のしがらみ: IDLは出自が実用本位であるため、過去の仕様が残っており、プログラマが個別に対処しなければならない場合があります。
データ互換性の制限: RSIは、他の環境とのデータ互換を防ぐために、IDLがセーブするデータファイルのフォーマットを公開していません。また、IDLファイルのリバースエンジニアリングはライセンス契約に違反する可能性があると明示しています。

IDLの例



idl
x = findgen(100)/10
y = sin(x)/x
plot,x,y


このコードは、`findgen`関数で0から9.9までの100個の浮動小数点数配列を生成し、`sin(x)/x`の計算結果をプロットするものです。`findgen`は、浮動小数点数の1次元配列を返し、その値は0から始まる整数の列と同じです。2行目の処理は、1行目で生成した100要素の配列全体を一度に処理するベクトル化された処理です。この例ではゼロ除算も含まれていますが、IDLは算術オーバーフローを通知しつつ、結果としてNaNを格納し、描画時には無視します。

IDLの活用例



IDLは、以下のような分野で活用されています。

宇宙開発: ハレー彗星の画像処理やハッブル宇宙望遠鏡のデータ解析などに利用されています。
リモートセンシング: ENVIというIDLで書かれたアプリケーションが、マルチスペクトル画像やハイパースペクトル画像の処理に使われています。
科学研究: 大気科学、天文学、地球物理学など、様々な科学分野でデータ分析に利用されています。

まとめ



IDLは、科学技術計算におけるデータ分析に特化した強力なプログラミング言語です。ベクトル演算や対話的な操作性に優れていますが、大規模なプログラムの開発には注意が必要です。単一の名前空間やジャグ配列の非対応など、いくつかの課題も抱えていますが、それでもなお、多くの科学者や技術者によって利用されています。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。