std.regexの気になる所

とりあえず現状気になる所をまとめておく(後々MLにでも投げる?).

  • キャッシュ

最後のパターンと属性が一致していればそれを返す.このためにstaticで持ったり生成時に比較するのはどうかなぁと思う.やるなら使えるレベルで欲しいし,無理でもtemplateでキャッシュを操作する関数と保持する変数をセットで提供して,mixinすればいいかなぁと思っている.

  • matchを呼ぶ以前の動作
RegexMatch!(string) regexMatch;

として生成しメソッドを呼ぶとRangeErrorとかを投げる場合がある.matchを呼ぶことを前提にしているのかどうか分からないので気になる(それならドキュメントに書くべきかなぁと思う).matchを呼ぶ以前ではregexMatch.emptyでtrueを返して欲しい.

  • 書き方がよく分からない

インターフェイスがシンプルになった故に,std.regexpで提供されてたものはどう書けばいいのかなぁと.

  • matchの結果が怪しい
auto m = match("abc", regex("abcd"));
writeln(m.src, " ", m.src_start, " ", m.empty);

結果が

3 3 true

となる.このケースはマッチしてないと思うので,バグのような気もする.試しにRubyでやってみても

> "abc" =~ /abcd/
=> nil

となる(おかしいのはm.src_startが移動してる所で,マッチしてないのに移動してもいいのかなと).