ruby-pytstに至るまで

Posted by yatsu Mon, 09 Oct 2006 02:59:18 GMT

自分でアルゴリズムを書くのが面倒なのと、メンテナンスする時間がなさそうだという理由で、誰かが書いたものにRubyインターフェースをかぶせるという方針にしました。

pytstの他には、ctstがAho-Corasick法の検索をサポートしていて、使えそうでした。 そこで以下を試みました(括弧内は進捗率)。

  1. pytstをCで書き直し、SWIGを使えずRuby拡張を作る (80%)
  2. ctstのコードからSWIGを使わずRuby拡張を作る (80%)
  3. ctstのコードからSWIGを使ってRuby拡張を作る (95%)
  4. pytstのPython依存部分をRubyで書き換え、SWIGを使ったRuby拡張を作る
    • (ruby-pytstとして公開済み)

1はコードを書き換えてしまっているので最初の方針に違反しているし、手間がかかるため途中で諦めました。 この時点ではSWIGを覚えるのが面倒だという気持ちが強かったです。

2は普通にできましたが、途中からSWIGでやってみたくなりました(あれ?)。

3はけっこう苦労しました。 SWIGる(すうぃぐる)のに簡単なコードと難しいコードがあることがわかりました。 Cで書かれていると、クラスとして見せるためにラッパーを書かなければなりません。 そのため、インターフェースとして公開するメソッドが多いと大変です。 また、typedefがいっぱいあったり、構造体と共用体の構成が複雑だったりすると、泣きたくなります。 ctstの場合は、直接Ruby拡張を書いた方が簡単でした。 いちおう動作しているようなので、SWIGインターフェースファイルだけ置いておきます。

結局、pytstの方がわかりやすくて使いやすいと感じたので、もう一度pytstに戻って、4の方法でruby-pytstを実装しました。

RubyでTST+AC法 (ruby-pytst)

Comments

Trackbacks

Use the following link to trackback from your own site:
http://yatsu_info/articles/trackback/21267

(leave url/email »)

   Comment Markup Help Preview comment