|
1.12.4 製品のソフトウェア工学
Mathematicaは,今日までに開発されたソフトウェアシステムの中で最も複雑なものの1つだろう.そのソースコードはC言語およびMathematica言語で書かれており,バージョン5に限っては,カーネル部で150万行におよぶC言語コードと15万行のMathematica言語コードからなっている.ソースコードの保管に必要な容量は50メガバイトに及び,すべてを印刷するには5万ページの紙が必要になる.
MathematicaのC言語コードは,特殊なメモリ管理およびオブジェクト指向の機能を備えたカスタマイズされたC言語で記述されている.また,Mathematicaのコードは,ShareとDumpSaveの機能が使われ最適化が図られている.
カーネルを構成している各コード部の比率は次の通りである.言語処理とシステム機能30%,数値解析機能25%,記号代数機能25%,そして,グラフィックスとカーネル出力機能に20%のコード量が使われている.
コードのほとんどはアルゴリズムを記述したもので,非常に緻密なものである.中には単純な手続きやテーブルの参照操作をもとにしたコードもあるが,それらは主に高レベルのMathematica言語で直接記述されている.
1パーセントに満たない小さな部分を除き,カーネルのソースコードはコンピュータシステムに依存しない形で記述されている.
しかし,フロントエンドはそうはいかない.各コンピュータシステムに適したユーザインター フェース環境を提供しなければいけない.このため,コンピュータシステムごとに特別なコードが必要になる.フロントエンドのソースコードはC言語で書かれており,その規模は,約65万行に及び,内15万行は式の表示に関するものである.また,5万〜10万行のコードはユーザインターフェースの環境を提供するためにある.
Mathematicaはクライアント・サーバー形式の計算環境も提供している.具体的には,外部プログラムとの連結を行うMathLinkを介すことによって,フロントエンドとカーネルの接続を達成している.
MathematicaカーネルのCコード部分は一体性と一貫性を兼ね備えている.これらの機能は,カーネルの各部分における別の部分との相互通信を,Mathematicaの式の交換を行うということを基本にすることで達成している.
このように,ソースコードのレベルでMathematicaシステムは機能別に独立したモジュール構成になっている.構成上は独立しているが,処理上は,モジュール間で関数の呼出し合いが行われるため相互依存の形を取っている.事実,数値解析的な関数が代数計算アルゴリズムを呼び出したり,グラフィックス関連のコードで,一見まったく関連がないような数学アルゴリズムが使われたりすることがよくある.
1986年に開発が始まって以来,Mathematicaのコーディング作業に費やされた労力は約千人のプログラマーが1年間通しで費やす時間に匹敵する.さらに,プログラムのテストや動作確認にもそれ以上の労力が注ぎ込まれている.
Mathematicaのバージョンが更新されるにつれ,コードの内容は大きく変貌している.カーネルのコードは,バージョン1で15万行だったのが,バージョン2では35万行になり,さらに,バージョン3では60万行,バージョン4では 80万行,バージョン5では約150万行の大きさになっている.これまでの更新作業で加えられた変更により,バージョン5のコードはバージョン1とは似ても似つかないものになっている.後者が前者に占める割合は,数パーセントにしか満たない.
コードの詳細は変わっても,ユーザインターフェースの設計指針はいずれのバージョンでも変わってはいない.機能面においていろいろ強化されはしたが,Mathematicaバージョン1で作成したプログラムは,そのほとんどが何も変更なしにバージョン5でも実行することができる.
|