RubyによるDCL拡張 DCL extension for Ruby: toward data objectization and efficient analysis セッション記号:Ae 後藤 謙太郎, 塩谷 雅人, 沼口 敦, 堀之内 武, 高橋 千賀子, 林 祥介 [1. 概要] RubyのためのDCL拡張を試みた.これは IDLのような多機能性と対話性を 提供す るもので,なおかつ,NetCDFのようなデ ータフォーマットを直 接扱えるなど,拡 張も容易である.結果として,柔軟かつ 素早くデー タ解析を行う開発環境が得ら れる. [2. IDLとは] IDL(Interactive Data Language)は,描 画と数学計算ライブラリを備え た,対話 的に操作できるインタプリタ言語である (米RSI Inc.の商用ソ フトウェア).言語 の骨格はFortranに似ているが,変数の 型は動的に 決まる.データの種類として は,数値スカラ,文字列,配列,構造体 をサポートする.現行の第5版からオブ ジェクト指向でいうクラスの定 義が一応 可能になったが,必ずしも使い良いとは 言えない. 2.1 IDLでのデータ解析・可視化 IDLでは,「物理量」の単位等の属性や 「軸」(独立変数)を持つ構造化 されたデ ータを扱うために,構造体を利用出来る .NetCDFのような自 己記述性をもつデー タフォーマットに対しては,ファイル上 の変数を 構造体で管理することで,作画 等の属性や軸に関する情報を自動的に入 手・操作するようなライブラリを構築可 能である.そういったライブラ リを作れ ば,快適にデータの操作と可視化を行う ことも出来る. 2.2 IDLの問題点 上で「作れば」と書いたが,問題はここ にある.IDL は拡張性・柔軟性 に欠ける .例えば,部分配列を範囲で指定するこ とは出来るが,これ に読みとばしのステ ップを導入することは不可能である.つ まり,仕 様にないことをプログラミング で解消する自由度は小さい.言語の近代 化も足りず,例えばガベージコレクショ ン(GC)は存在しない.最後に, フリーで ないということも挙げておく.かなり高 価なことも問題であ るが,ソースコード が公開されていないためユーザによる改 良の自由 がないことも障害となる. [3. Ruby] Rubyはまつもとゆきひろ氏が設計開発し たオブジェクト指向スクリプティ ング言 語であり,次のような特徴を持つ:オー プンソースフリーソフ トウェア,インタ プリタ,すべてがオブジェクト,シンプ ルな文法, 型を持たない変数,再定義可 能な組み込みメソッド,引数に出来るク ロージャ,GC,プラットフォームに依存 しないスレッド,活発な国内の コミュニ ティなど. 3.1 Rubyの拡張ライブラリ RubyはPerlやPythonのような他のスクリ プティング言語と同様,既存ラ イブラリ を利用する拡張ライブラリを容易に作成 出来る.本研究にお いては,地球流体電 脳倶楽部によるFotranベースの基本関数 ・描画ラ イブラリであるDCLを Rubyから 使うための拡張を作成した.またRubyの 配列は任意の要素を格納できるが,自由 度から来るオーバヘッドが我々 の大規模 計算では無視できないため,数値に特化 した多次元配列を表 現するNumArrayクラ スを作成した.これは多次元配列に必須 の機能(部 分配列の取り出し,指定され た間隔による繰り返し処理など)を持た せ たものである. 3.2 Rubyによる利点 Rubyはインタプリタなので急いで書き下 すことや.プロトタイピングに 向いてい る.インタプリタ固有の遅さは時間のか かる処理を予めCや Fortanで書いて,実 行時にリンクすれば補える.さらに柔軟 な表現が 可能である点が特筆に値する. 例えば,3次元配列aの各要素に三角関数 sinを施した結果の第1,3成分を固定した 断面の和をi=1..nの範囲でとる ことを, sum(1,n){|i| sin(a)[0,i,3]} と書くことも出来る.またGTKやTKも用 意されているので,プラットフォー ムに 依存しないGUIの作成は容易である.GNU のReadlineも利用できる ため,ユーザが 自分のための対話環境を構築することも たやすい. バイナリ形式を扱うためのメソッドも我 々が一部拡張し,IEEE754形式 の浮動小 数点数のバイナリフォーマットもエンデ ィアンを考慮しつつ 扱えるようになった .また近年発達したYacc相当のパーザ生 成器を使 えば文脈自由言語で書かれたフ ァイルも解釈できるので,NetCDFの拡張 等も手軽に試せる.これは既存データを オブジェクト化するための橋渡 しとなる ことを意味する. [4. まとめ] Rubyのもつ柔軟性は以前より認められて いるが,数値計算に本格的に応 用しよう という動きはこれまで無かった.そのた め現時点では少なく とも数値計算界での Rubyの認知度は決して高いとはいえない .しかし, 記述の柔軟性やオープンソー スのもとでの拡張のしやすさを考慮すれ ば,特に計算資源の低価格化が進む今日 ,開発効率の向上のための当ア プローチ は極めて有効であると考える.