SWIG を使ってみてはどうでしょう2008年08月29日 22時01分10秒

libnmz の Perl バインディングには Search::Namazu があります。 また、最近 libnmz を Java バインディングとして JNI を使う話も書きました。 その他の言語から libnmz を使いたい場合はその言語用のバインディングを用意すれば良いだけです。

しかし、個々の言語用にそれぞれ専用のバインディングを用意することは大変です。 代わりに SWIG を使って共通のソースから様々な言語のバインディングを作成するのが楽で良いでしょう。 SWIG を使った方がオーバーヘッドはあるものの、生産性、保守性は高いと思います。

SWIG は Tcl/Tk、Perl、Python、Ruby、PHP 等のスクリプト言語の他、 C#, CLISP, Java 等の言語用のバインディングを作成することができるツールです。

http://www.swig.org/

Namazu の身近なところで SWIG が使われている例としては MeCab があります。 mknmz から利用している MeCab の Perl バインディングは SWIG によって生成されています。 (ちなみに Text-ChaSen と MeCab Perl バインディングの処理速度にあまり差がないのは、 SWIG のオーバーヘッドによるものではありません。お間違いのないように)

ただ、SWIG が生成したコードは、VC++ でコンパイルできないようなので、 Windows 環境のことを考えるとちょっと腰がひけてしまいますがね。 (MinGw + gcc ではコンパイルできるようですが、x64 対応とか考えると少々厄介です。)

追記:

SWIG 自体は VC++ に対応しているので、SWIG 用インターフェイスファイルを記述する時に gcc, g++ に依存しないようにすれば VC++ でもコンパイルできるかもしれません。