やっぱ1.5で

昨日、ようやく Find が動き始めました。

さあ、これからちゃんとしたテストプログラムを書こうと思ったその瞬間。

旧バージョンのメンテナンスをするために、2つのテストプログラムを維持しなければならないことに気づきました。

メンドウクサイ。

その上、ヘルプも書き直さなければならないのです。

メンドウクサイ。

一気にモチベーションがしぼみました。

と言う訳で2.0は諦めて1.5にします。

取り敢えず、条件付グループの Perl 5.10 互換を高めたバージョンを近く公開します。

(?(条件式) 式1 )
(?(条件式) 式1 | 式2)

あと、Perl 5.10 の特殊なバックトラック制御記号については実装こそしたモノの、公開するかどうかは考え中です。

と言うのも、特殊なバックトラック制御記号のサンプルを実行すると、Perl や PCRE とことごとく結果が違うのです。

(*PRUNE) (*SKIP) (*MARK) (*THEN) (*ACCEPT) (*FAIL) (*COMMIT)

このまま公開しても「バグだ」と言われかねないです。

でも違うんです。最適化が原因なのです。

たとえば、a+b と言う正規表現があります。これを aaab にマッチさせたとします。

Perl や PCRE はマッチが成功するまで 4 つのバックトラックステートを保存します。

しかし、SkRegExp は 1 つしかバックトラックステートを保存しません。

これは単純な話です。

a は絶対に b にマッチしないから。文字が a ならバックトラックする意味はないんです。

他にもこの手の最適化が施されているので、様々な場面で違いがでます。

さて、どうしたモノか。

コメントを残す

メールアドレスが公開されることはありません。