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++ でもコンパイルできるかもしれません。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://namazu.asablo.jp/blog/2008/08/29/3719035/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。

_ ナマズのブログ - 2008年09月04日 01時33分17秒

SWIG を使って libnmz の様々な言語用のバインディングを作成してみましょう。

最初は UNIX 環境で libnmz の nmz_get_version を呼び出すことを考えます。

nmz_get_version は、namazu/libnamazu.h に定

_ ナマズのブログ - 2008年09月19日 06時17分54秒

SWIG を使って libnmz の様々な言語用のバインディングを作成してみましょう。

今回は UNIX 環境(Linux)で Python から libnmz の nmz_get_version を呼び出すことを考えます。

モジュール名は前回