鬼車#2

1111 letters | 858 views | コメントする

真魚から使うことのみを想定したクラスを書いてみた。
すなわち、今までTRegExprを使っていた部分を書き換えずに、差し替えのみで動作する形で。
で、例の8万文字テストをしてみたのだが、ちゃんと動作したし数倍速くなった。
掲示板にあった、正規表現でも検索結果を色分けする実装を行ったせいで、
TRegExprを使った方はもう固まる寸前で動作しているのだが、
鬼車を使った方は遅いけどじわりじわりと動いてくれて、その実力を見せてくれた。

TRegExprに唯一不満だった、スピード面を向上させているので、
外部DLLが一個増えるとしても実装の価値はあると言える。
ユニコードの検索もバッチリだ。

でも一つだけ納得いかない。
マッチしなかったら-1を返すべき関数が、どうしても0を返してくる。
そのせいで、マッチしなかったのか先頭で0文字にマッチしたのか区別できない。
困った。
下方向へ検索するなら、検索開始位置より小さい数字が来たらハズレにできる。
でも、上方向への検索だと、実際に先頭の0文字にマッチさせる必要もある。
マジで困った。
ここさえクリアできればかなり魅力的なんだが。

あと実はもう一つ、マルチスレッドの問題はまだ検証していない。
FAQにそれらしい情報が書いてあるのだが、普通に使ってりゃ問題が起こらなそうだ。
いや、意地悪な使い方で問題を起こせそうなのだが、無視しても構わなそうだ。

それから、もし気にくわないところがあったら修正できるよう、
DLLを自分でもビルドしてみた。Km氏の所と若干ファイルサイズが違っている。
ウチはVS2003だが、あちらはどのバージョンのVC++なんだろうか。
いや、あたしゃ知識がないので素直にビルドしたんであって、
あちらはなんかいろんなオプション指定したのかも知れないんだよね。

ともかく、スピード面で非常に魅力的なので、これは移行も十分ありうる。
上記の困った問題と、DLL添付してまで正規表現のスピードにこだわるべきかと、
あと、検索は良いけど置換をどうにかしなきゃと言う問題もあるにはある。

たぶん関連のある記事:

コメントは終了しています。