[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000210] goudou taikai yokou



ごとけんです

遅くなりましたが、合同大会の予稿を送ります。 > 林さん

前半は堀之内さんの書いたものを切り貼りしました。

それと、サーバが落ちてるみたいでearth2000に投稿できません。

______________________________________________________________________


RubyによるDCL拡張 -- データのオブジェクト化と作業効率の向上に向けて

概要

RubyのためのDCL拡張を試みた.これはIDL(下記参照)のような多機能性と対話性を
提供するもので,なおかつ,NetCDFのようなデータフォーマットを直接扱えるなど,
拡張も容易である.結果として,柔軟かつ素早くデータ解析を行う開発環境が得ら
れる.

IDLとは

IDL(Interactive Data Language)は,グラフィックと数学計算ライブラリを備えた,
対話的に操作できるインタープリター型言語である(米国の RSI Inc. の商用ソフト
ウェアー).言語の骨格はFortranに似ているが,変数の型は動的に決まる.データ
の種類としては,数値スカラー,文字列,配列,構造体をサポートする.現行の第5
版からオブジェクト指向でいうクラスの定義が一応可能になったが,必ずしも使い
良いとは言えない.

IDLでのデータ解析・可視化

IDLでは,「物理量」の単位等の属性や「軸」(独立変数)を持つ構造化されたデータ
を扱うために,構造体を利用することが出来る.NetCDFのような自己記述性をもつ
データフォーマットに対しては,ファイル上の変数を構造体で管理することで,作
画等の属性や軸に関する情報を自動的に入手・操作するようなライブラリを構築す
ることが可能である.そういったライブラリを作れば,快適にデータの操作と可視
化を行うことが出来る.

IDLの問題点

上で「作れば」と書いたが,問題はここにある.IDL は拡張性・柔軟性に欠けるの
である.たとえば,部分配列を範囲で指定することは出来るが,これに読みとばし
のステップを導入することは不可能である.つまり,Ruby等の本格的オブジェクト
指向言語と違って,仕様にないことをプログラミングで解消する自由度は小さい.
また,言語の近代化も足りず,例えばガベージコレクションは存在しない.最後に,
フリーでないということも挙げておく.値段がかなり高いことも問題であるが,
ソースコードが公開されていないためユーザーによる改良の自由がないことも障害
となる.

Rubyとは

Rubyはまつもとゆきひろ氏が設計開発した日本発のオブジェクト指向スクリプティ
ング言語であり,次のような特徴を持つ:オープンソースフリーソフトウェア,イ
ンタプリタ,すべてがオブジェクト,型を持たない変数,ブロックを渡すことので
きるメソッド,Eiffel風の文法,ガベージコレクション,プラットフォームに依存
しないスレッド,活発な国内のコミュニティなど.

Rubyの拡張ライブラリ

RubyはPerlやPythonのような他のスクリプティング言語と同様に,既存のライブラ
リを利用するための拡張ライブラリを容易に書くことが出来る.本研究においては,
電脳倶楽部のライブラリDCLをRubyから使うためのライブラリを作成した.また,
Rubyの配列は任意の要素を格納できるが,すべてがオブジェクトであるためにオー
バヘッドが大きい.そこで処理速度を向上させるため,多次元配列を扱う数値デー
タのためのNumArrayクラスを作成した.これは多次元配列を扱う際に必要かつ便利
な機能,たとえば,部分配列の取り出し,指定された間隔による繰り返しなどの機
能を持ったものである.

Rubyによる利点

Rubyはインタプリタであるので急いで書き下すのに向いている.インタプリタは遅
いと思われるかも知れないが時間のかかる処理は予めCやC++あるいは FORTRANで書
いて,実行時にリンクすればその部分は高速に行える.また,これらのことからプ
ロトタイピングにも向いている.しかし,これらに加えて柔軟な表現が可能である
点が特筆に値する.たとえば,3次元配列aの各要素に三角関数sinを施した結果の第
1,3成分を固定した断面の和をi=1..nの範囲でとることを,
   
    sum(1,n){|i| sin(a)[0,i,3]}
    
と書くことも出来る.またGTKやTKあるいはXlibといったライブラリが使えるた
め,プラットフォームに依存しない描画ルーチンを書くことも容易である. GNUの
Readlineライブラリも利用できるため,利用者が自分のための対話環境を構築する
こともたやすい.

バイナリ形式を扱うためのメソッドも我々が一部拡張し,IEEE754形式の単精度およ
び倍精度浮動小数点数のバイナリもエンディアンを考慮しつつ扱えるようになった.
さらに近年発達したyacc相当のパーザ生成器を使えば文脈自由言語で書かれたフォー
マットも解釈することが出来るため,NetCDFの拡張も手軽に試せる.これは既存デー
タをオブジェクト化するための橋渡しとなることを意味する.

まとめ

Rubyのもつ柔軟性は以前より認められているが,数値計算に本格的に応用しようと
いう動きはこれまで無かった.そのため現時点では少なくとも数値計算界でのRuby
の認知度は決して高いとはいえない.しかし,記述の柔軟性やオープンソースのも
とでの拡張のしやすさを考慮すれば,特に計算資源の低価格化が進む今日,開発効
率の向上のための当アプローチは極めて有効であると考える.
______________________________________________________________________