基本的な内部アーキテクチャ
式をタイプし Mathematica に入力すると,コンピュータのメモリに,入力された式を表すためのデータ構造体が作成される.
入力したひとつひとつの式の成分は,通常,カーネルで固有のデータ構造体として扱われ,個別のメモリ領域に保管される.例えば,
とリストを入力したとする.すると,まず,リスト全体の構造を表した「骨格的情報」が特定の場所に保管され,次に,個々の成分が別の場所に保管される.
このリストの骨格的情報はちょうど3つのポインタからなり,このポインタはリストの要素を構成する実際の式の番地を指し示す.そしてそれらの式が部分式を持つならば,その部分式に対するポインタを含む.こうして,数珠つなぎになったポインタの最後に示す番地には,これ以上分解することができない最小成分の値そのものが二進数形式で保存される.
Mathematica の演算に対する究極的なものは
等のシンボルの概念である.すなわち,
が参照されるたびに,新たなポインタが内部に設けられ,そのポインタ自体が
として扱われる.しかし,このポインタは同一メモリ番地を指している.この番地は,現行 Mathematica セッションで定義されてあるすべてのシンボルを保管しておく中央テーブルと呼ばれるメモリ領域の一廓に当たる.
中央テーブルは,個々のシンボルに関するすべての情報をしまっておくところである.そこには,シンボル名の所在を示すポインタ,さらに,シンボルの評価に必要な変換規則を定義した式の所在を示すポインタが保管される.
メモリ管理は随時行われ,定義式や変数を保管する各メモリ領域について現在何個のポインタが向いているかが調べられる.アクセスするポインタ数がゼロになったとき,そのメモリ領域は必要がなくなったものとみなされ,保管してあるデータは除去され,メモリはリサイクルに回される.
こうすることで,常に実際に使われているデータしかメモリには保管されないことになり,無駄のないメモリ管理が遂行できる.
Mathematica の中核は,評価体と呼ばれる,単純な構造の手続きからなる.評価体は,式に現れる個々の関数を抽出し評価するためにある.
評価する関数が,およそ千個ある組込み関数のどれかであれば,評価体から直接 Mathematica システムの内部コードが実行される.評価する関数に対応した操作を行い,その結果を表すための新たな式を構築するところがこの内部コードである.
Mathematica の提供する組込み関数は,ユニバーサルな計算にも対応できるように作られている.つまり,組込み関数を使うだけで,使用中のコンピュータ上で可能な操作なら何でもできるプログラムを組み立てることができるようになっている.
実際に試してみると分かるが,意外に少ない基本的な関数だけでユニバーサルな計算用途に対応することができる.しかし,実際にさまざまな組込み関数があるので,プログラムの構築はやりやすい.
要するに,Mathematica はユニバーサルな計算に対応しているので,ユーザ自身が組込み関数をカスタマイズしたりする必要は全くない.組込み関数で直接計算できない場合でも,それらを組み合せて使えば必ず計算できる.
ユニバーサルな計算という考え自体は,すべての標準的なプログラミング言語にも当てはまる.しかし,これらの多くのプログラミング言語は,コードのコンパイル作業に頼っている.ユーザがC言語またはFortranを用いるならばプログラムを記述した後に,それをコンパイルして,コンピュータ上で実際に実行できる機械語コードを生成しておく必要がある.
Mathematica を使えば,プログラムをいちいちコンパイルする必要はない.式を書いたなら,それを入力した時点で,式にある関数は直ちに実行される.
計算処理がより効率的に行われるように,入力された式に対して前処理(プリプロセス)が行われる.この処理のために得られる結果が変わることは全くなく,ほとんどの場合は,前処理があっても,ユーザの目に触れることはない.
