ruby-pytstに至るまで
Posted by yatsu Mon, 09 Oct 2006 02:59:18 GMT
自分でアルゴリズムを書くのが面倒なのと、メンテナンスする時間がなさそうだという理由で、誰かが書いたものにRubyインターフェースをかぶせるという方針にしました。
pytstの他には、ctstがAho-Corasick法の検索をサポートしていて、使えそうでした。 そこで以下を試みました(括弧内は進捗率)。
- pytstをCで書き直し、SWIGを使えずRuby拡張を作る (80%)
- ctstのコードからSWIGを使わずRuby拡張を作る (80%)
- ctstのコードからSWIGを使ってRuby拡張を作る (95%)
- pytstのPython依存部分をRubyで書き換え、SWIGを使ったRuby拡張を作る
- (ruby-pytstとして公開済み)
1はコードを書き換えてしまっているので最初の方針に違反しているし、手間がかかるため途中で諦めました。 この時点ではSWIGを覚えるのが面倒だという気持ちが強かったです。
2は普通にできましたが、途中からSWIGでやってみたくなりました(あれ?)。
3はけっこう苦労しました。 SWIGる(すうぃぐる)のに簡単なコードと難しいコードがあることがわかりました。 Cで書かれていると、クラスとして見せるためにラッパーを書かなければなりません。 そのため、インターフェースとして公開するメソッドが多いと大変です。 また、typedefがいっぱいあったり、構造体と共用体の構成が複雑だったりすると、泣きたくなります。 ctstの場合は、直接Ruby拡張を書いた方が簡単でした。 いちおう動作しているようなので、SWIGインターフェースファイルだけ置いておきます。
結局、pytstの方がわかりやすくて使いやすいと感じたので、もう一度pytstに戻って、4の方法でruby-pytstを実装しました。
