付録B 電脳 Ruby プロジェクト

B.1 目的

本文で触れたように電脳 Ruby プロジェクトはオブジェクト指向スクリプト言語 Ruby を用いて多次元データの解析・可視化ライブラリを開発するプロジェクトである. Ruby の特徴であるオブジェクト指向というプログラムパラダイムを取り入れることで従来型の設計では面倒だった処理を簡単に実現しようとしている.

オブジェクト指向とは, 現実世界で対象とする物は全て, 自分自身がデータ(属性)とメソッド(振る舞い)を持つオブジェクトという表現単位, またはその集合であり, オブジェクトのあり方とその関連に着目することによって対象となるシステムをモデル化することができるという考え方である. この考え方をソフトウェアの世界に用いると, プログラムをオブジェクトという独立した部品として設計するため, 再利用しやすく保守性の高いソフトウェアに繋がり, 結果, 開発効率も上がる. しかしオブジェクト指向が必ず保守性・開発効率に優れるわけではなく, そのためには例えば Ruby のようなオブジェクト指向プログラミングを支援する機能を持つ言語を使い, オブジェクト指向技術を上手に使うことが必要である.

多次元データの解析において異なるデータ形式のデータも同じ統一されたメッセージ(命令)で扱うことができるとプログラミング効率を上げることができる。多次元データの科学技術データ形式は標準的なものでも数種類存在し, しかもデータが存在する媒体も1つではない. 異なるデータ形式のファイルを読み込むにはその形式ごとに異なるライブラリを用いて行う. 手続き型の設計で異なるファイルを読み込むプログラムを作成する場合には考えられるデータ形式の数だけ条件分岐を作る必要があるだろう. オブジェクト指向の設計では異なるデータ形式であってもデータ自身がデータの読み方を知っているため統一的なメッセージで扱う. そのため手続き型の場合に比べてプログラミングの負担が軽減される. また, 同様に異なる媒体にあるデータも統一的なメッセージで扱うことができるだろう. 異なる媒体とは, 例えば手元の計算機の場合とネットワーク上の場合である. ネットワーク上のデータであっても手元の計算機にあるデータと同じように扱うことができれば更にプログラミングに費やす労力を軽減することができる.

B.2 Ruby の特徴

Ruby は 10 年程前にまつもとゆきひろ[8]によって開発された言語であり, 言語としては新しい部類にはいる. そのため Smalltalk をはじめとした様々な言語の良い部分を取り込んだ言語になっている.

Ruby の特徴は手軽なプログラミングを求めた設計思想である. 特に最初から純粋なオブジェクト指向言語として設計された言語であるため手軽にオブジェクト指向プログラミングができる特徴を持っている. Ruby は変数にデータ型が存在せず全てオブジェクトである. また, ほとんどの処理がメソッドであり, 関数, 手続き, コマンドといった区別がないという特徴をもつ. したがって Ruby は非オブジェクト指向的な設計になりにくい設計になっている. それに対し例えば C++ のように手続き型の記述も可能な言語では, 非オブジェクト指向的プラグラムと混在し, かえってすっきりしない設計に陥りやすい欠点をもつ.

また Ruby は非常に開発効率のよい言語である. まず, オブジェクト指向であるため開発効率が良い. 次に可読性の高さによって開発効率が良い. 豊富なリテラルを持つため記述がシンプルになる. また柔軟の記述方法を許す文法であるため人間にとって読みやすいプログラムを書くことができる. そして, 例外処理や自動的にメモリ管理を行うガーベッジコレクタなどのプログラミング支援機能があるため, 機能の実装に集中することができる. また, インタプリタであることも開発効率に貢献していると思われる.

GUI やネットワーク関連などのライブラリが既に開発されていることも Ruby の重要な特徴である. 特に GUI ライブラリは Ruby ではRuby/Gtk, Ruby/Tk, Ruby/Qt, Apollo(Delphi の機能を利用できるライブラリが付属)など非常に多い. 本論文で取り上げる GAVE は GUI を Ruby/Gtk で実装している.

欠点もいくつかあげられるが, 最も大きな欠点は速度である. まずインタプリタ型の言語であるためほとんどの場合, コンパイル型の言語に比べて実行速度が遅い. また Ruby は他の言語に比べて柔軟な文法を許すため構文解析に負荷がかかり速度に影響を与える.

電脳 Ruby プロジェクトでは多次元数値配列を扱うため Ruby では大量の数値オブジェクトに対して計算を行うことになり演算速度が遅いことが問題である. しかし, この問題は拡張ライブラリを使うという方法でほぼ解決することができる. Ruby は C 言語で記述された言語である. そのため Ruby で書かれたプログラムは C 言語でも書くことが可能である. ただし冗長な定義やメモリ管理が必要である. この C 言語で書かれた Ruby のライブラリを拡張ライブラリという. C言語で記述し, コンパイルされているプログラムであるため当然速度は速くなっている. 多次元数値配列クラス NArray も拡張ライブラリのひとつである. NArray は通常の配列クラス Array とは異なり, 一様に並べられたポインタを構造体でくるんだものである. その結果, NArray ライブラリを使うと配列に対する高速な演算が可能である.