はじめに

現代のコンピュータシステムのほとんどでは,コードを収集してライブラリにする方法が提供されている.これらのライブラリは,アプリケーションが構築されたときではなく,実行時にアプリケーションにロードできる場合は,ダイナミックであると言われる.アプリケーションが実行し始めてからのロードが可能であると,機能を追加するのに便利である.多くのプラグインアーキテクチャが,このようにロードされたダイナミックライブラリから構築されている.

Wolfram LibraryLink を使うと,ダイナミックライブラリを Mathematica カーネルに直接ロードすることが可能となり,ライブラリの関数が Matheatica から即座に呼び出せるようになる.整数,実数,パックアレー,文字列等のCのようなデータ型だけでなく,任意の Mathematica 式も交換できる.さらにエラーを送り,Mathematica にコールバックするような便利な関数もある.

Wolfram Libraryから MathematicaLibraryFunctionLoadで関数がロードできる.

In[1]:=
Click for copyable input
Out[1]=

LibraryFunctionに整数の引数を与えて呼び出すことができる.結果も整数である.

In[2]:=
Click for copyable input
Out[2]=

表やその他の Mathematica プログラミング構造の中で関数を使うことができる.

In[3]:=
Click for copyable input
Out[3]=

整数でない入力で関数を呼び出すと,エラーが生じ,入力がそのまま返される.

In[4]:=
Click for copyable input
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 プログラミングの通常の方法でコードを書くということである.以下に利点と欠点をまとめる.

  • Mathematica コードは素早く書け,実行するプラットフォーム用にコンパイルする必要がない.
  • Mathematica コードは使われていないメモリを自動的に集める.
  • Mathematica コードはセーフモードで実行される.プログラマーのエラーによってC関数がクラッシュするように Mathematica プログラムがクラッシュすることはない.
  • DLL関数は場合によっては Mathematica で書かれたものより速いことがある.コア関数をDLLで書くことは,アプリケーションのパフォーマンスを改善する一つの方法である.もちろんアプリケーションが行列の操作等の多くのコア関数を呼び出す場合は,このような関数は Mathematica ではすでに高度に最適化されている.
  • 他のライブラリとインタラクトしたい場合は,DLLから呼び出した方が便利で効率的であることがある.

MathLink アプリケーション

別の方法に,MathLink を使うというものがある.つまり,Cプログラムとしてコードを書き,MathLink プログラミングインターフェースを使って Mathematica に接続するということである.以下に利点と欠点をまとめる.

  • MathLink アプリケーションは一般に別のプロセスとして実行されるので,MathLink プログラムがクラッシュしても Mathematica には影響しない.
  • MathLink インターフェースにより,Mathematica 式はすべてアプリケーションから読み書きできるようになる.しかし, MathLink を使えばDLL関数とも通信できる.したがって,これは利点でも欠点でもない.
  • MathLink インターフェースでは MathematicaMathLink アプリケーションを異なるマシンで,異なるシステム上でも実行することが可能である.
  • ライブラリ関数を呼び出す際のオーバヘッドが MathLink インターフェースを使った場合より格段に低い.
  • ライブラリ関数から受け取る,またはライブラリ関数に渡す引数はデータを共有することができるので,メモリ消費と大量のデータをコピーするための時間が節減できる.
  • MathematicaMathLink アプリケーションの結果を待っているときは,ユーザインターフェース操作等に必要な割り込み型計算に使用することができる.ライブラリ関数の実行中にこれを行うのは,ライブラリの作者にとって容易ではない.
  • ホストの Mathematica プロセスが実行を停止すると,ライブラリ関数も停止する.MathLink アプリケーションの場合は,Mathematica が停止したときに停止しないという保証はない.
  • MathLink では32ビットおよび64ビットのアプリケーションが接続できる.ライブラリは実行中の Mathematica に対応するバイナリでなければならない.
New to Mathematica? Find your learning path »
Have a question? Ask support »