福嶋です。

Masaki Fukushima <fukusima / goto.info.waseda.ac.jp> wrote:
> 実は、最近 SWIG の Ruby モジュールを作ってました。
> 一応、動くようになっているので、リリースの準備さえ整えれば近日中
> に公開できると思います。

というわけで、公開します。

http://www.goto.info.waseda.ac.jp/~fukusima/ruby/swig-j.html

# contrib にも put しました。

SWIGは、C/C++ のヘッダファイルか、あるいは専用に作ったインタフェー
ス定義ファイルからスクリプト言語用の拡張モジュールを自動的に生成
するツールです。これは、その SWIG を Ruby に対応させるモジュール
です。

「インタフェース定義ファイル」とは簡単に書くと以下のようなもので
す。(実際に「使える」ものにするにはもう少し複雑になりますが...)

%module SwigDBM
typedef struct {
  %addmethods {
    static DBM *open(char *name, int flags = O_RDWR|O_CREAT, int mode = 0666);
    ~DBM() {
        dbm_close(self);
    }
    void  close();
    int   store(datum key, datum content, int flag = DBM_REPLACE);
    datum fetch(datum key);
  }
} DBM;

インターフェースファイルで struct として定義されたものは自動的に 
Ruby のクラスとして扱えるようになります。例えば、今の dbm のイン
タフェースをコンパイルすれば、以下のように使用することができます。

require 'SwigDBM'
dbm = SwigDBM::DBM.open('test')
value = dbm.fetch('key')
dbm.close

---
福嶋正機