はじめに
現代のコンピュータシステムのほとんどでは,コードを収集してライブラリにする方法が提供されている.これらのライブラリは,アプリケーションが構築されたときではなく,実行時にアプリケーションにロードできる場合は,ダイナミックであると言われる.アプリケーションが実行し始めてからのロードが可能であると,機能を追加するのに便利である.多くのプラグインアーキテクチャが,このようにロードされたダイナミックライブラリから構築されている.
Wolfram LibraryLink を使うと,ダイナミックライブラリをWolfram言語カーネルに直接ロードすることが可能となり,ライブラリの関数が Matheatica から即座に呼び出せるようになる.整数,実数,パックアレー,文字列等のCのようなデータ型だけでなく,任意のWolfram言語式も交換できる.さらにエラーを送り,Wolfram言語にコールバックするような便利な関数もある.
Wolfram LibraryからWolfram言語にLibraryFunctionLoadで関数がロードできる.
LibraryFunctionに整数の引数を与えて呼び出すことができる.結果も整数である.
表やその他のWolfram言語プログラミング構造の中で関数を使うことができる.
整数でない入力で関数を呼び出すと,エラーが生じ,入力がそのまま返される.
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から関数を直接ロードすることには,数々の利点と欠点がある.このセクションでは利点と欠点について見直し,代替方法について述べる.
Wolfram言語
代替方法の一つは,Wolfram言語を使うというものである.つまり,Wolfram言語プログラミングの通常の方法でコードを書くということである.以下に利点と欠点をまとめる.
- DLL関数は場合によってはWolfram言語で書かれたものより速いことがある.コア関数をDLLで書くことは,アプリケーションのパフォーマンスを改善する一つの方法である.もちろんアプリケーションが行列の操作等の多くのコア関数を呼び出す場合は,このような関数はWolfram言語ではすでに高度に最適化されている.
WSTPアプリケーション
別の方法に,Wolfram Symbolic Transfer Protocol (WSTPを使うというものがある.つまり,Cプログラムとしてコードを書き,WSTPプログラミングインターフェースを使ってWolfram言語に接続するということである.以下に利点と欠点をまとめる.
- Wolfram言語はWSTPアプリケーションの結果を待っているときは,ユーザインターフェース操作等に必要な割り込み型計算に使用することができる.ライブラリ関数の実行中にこれを行うのは,ライブラリの作者にとって容易ではない.