はじめに
現代のコンピュータシステムのほとんどでは,コードを収集してライブラリにする方法が提供されている.これらのライブラリは,アプリケーションが構築されたときではなく,実行時にアプリケーションにロードできる場合は,ダイナミックであると言われる.アプリケーションが実行し始めてからのロードが可能であると,機能を追加するのに便利である.多くのプラグインアーキテクチャが,このようにロードされたダイナミックライブラリから構築されている.
Wolfram LibraryLink を使うと,ダイナミックライブラリを Mathematica カーネルに直接ロードすることが可能となり,ライブラリの関数が Matheatica から即座に呼び出せるようになる.整数,実数,パックアレー,文字列等のCのようなデータ型だけでなく,任意の Mathematica 式も交換できる.さらにエラーを送り,Mathematica にコールバックするような便利な関数もある.
Wolfram Libraryから Mathematica にLibraryFunctionLoadで関数がロードできる.
| In[1]:= |
| Out[1]= |
LibraryFunctionに整数の引数を与えて呼び出すことができる.結果も整数である.
| In[2]:= |
| Out[2]= |
表やその他の Mathematica プログラミング構造の中で関数を使うことができる.
| In[3]:= |
| Out[3]= |
整数でない入力で関数を呼び出すと,エラーが生じ,入力がそのまま返される.
| In[4]:= |
| Out[4]= |
Wolfram Libraryを作る方法の一つに,それをCまたはC++で書き,C開発ツールを使うというものがある.以下に関数のソースを示す(Cコードの詳細は「Libraryの構成とライフサイクル」で説明されている).
DLLEXPORT int demo_I_I(WolframLibraryData libData,
mint Argc, MArgument *Args, MArgument Res) {
mint I0;
mint I1;
I0 = MArgument_getInteger(Args[0]);
I1 = I0 + 1;
MArgument_setInteger(Res, I1);
return 0;
}
Wolfram Library関数の代替方法
Wolfram Libraryから関数を直接ロードすることには,数々の利点と欠点がある.このセクションでは利点と欠点について見直し,代替方法について述べる.
Mathematica
代替方法の一つは,Mathematica を使うというものである.つまり,Mathematica プログラミングの通常の方法でコードを書くということである.以下に利点と欠点をまとめる.
- DLL関数は場合によっては Mathematica で書かれたものより速いことがある.コア関数をDLLで書くことは,アプリケーションのパフォーマンスを改善する一つの方法である.もちろんアプリケーションが行列の操作等の多くのコア関数を呼び出す場合は,このような関数は Mathematica ではすでに高度に最適化されている.
MathLink アプリケーション
別の方法に,MathLink を使うというものがある.つまり,Cプログラムとしてコードを書き,MathLink プログラミングインターフェースを使って Mathematica に接続するということである.以下に利点と欠点をまとめる.
- MathLink インターフェースにより,Mathematica 式はすべてアプリケーションから読み書きできるようになる.しかし, MathLink を使えばDLL関数とも通信できる.したがって,これは利点でも欠点でもない.
- Mathematica は MathLink アプリケーションの結果を待っているときは,ユーザインターフェース操作等に必要な割り込み型計算に使用することができる.ライブラリ関数の実行中にこれを行うのは,ライブラリの作者にとって容易ではない.
