JAGS が将来たのしみなソフトウェアである理由として,
その拡張性のポテンシャルの高さをあげてよいだろう.
user-manual.pdf を読むとわかるけれど,
各部がうまくモジュール化された設計になっていて
……
おそらくユーザーによる
C++ 言語をもちいた
extension モジュールの作成が可能.
というのも,
たとえば
JAGS-1.0.0/src/modules/bugs/functions/Sum.cc
はかくのごとく定義されていて,
#include <config.h>
#include <util/logical.h>
#include "Sum.h"
using std::vector;
namespace bugs {
Sum::Sum () : Function("sum", 1)
{
}
void Sum::evaluate(double *x, vector <double const *> const &args,
vector<unsigned int> const &lengths,
vector<vector<unsigned int> > const &dims) const
{
double value = args[0][0];
for (unsigned long i = 1; i < lengths[0]; ++i) {
value += args[0][i];
}
*x = value;
}
bool
Sum::checkParameterDim (vector<vector<unsigned int> > const &args) const
{
return true;
}
(...中略...)
}
……
てなかんぢで,
コンパイルされて /usr/lib/jags/modules/
などに静的・動的ライブラリとして格納されている.
つまりおそらく,
ユーザーが作ったモジュールも適切なコンパイルをおこない,
JAGS 起動時にモジュールパスを指定してやれば,
これを動的にロードして MCMC 計算に使えるのではなかろうか,
と憶測している.
こういう使いかたができるかも,
というのはじつにスゴいことだ.