Would there be interest in a SERIOUS compile-time regex parser?
Hasan Aljudy
hasan.aljudy at gmail.com
Mon Oct 16 09:31:55 PDT 2006
I only speak for myself, but there are my 2 cents anyway:
I don't see myself ever needing this kind of thing.
As for the extra speedup, well, I've never been a speed freak, I always
try to sacrifice performance in favor of code readability.
So I don't see this to be worthwhile.
Don Clugston wrote:
> In the past, Eric and I both developed compile-time regex engines, but
> they were proof-of-concept rather than something you'd actually use in
> production code. I think this also applies to C++ metaprogramming regexp
> engines, too.
>
> I've had a bit of play around with the regexp code in Phobos, and have
> convinced myself that it would be straightforward to create a
> compile-time wrapper for the existing engine.
>
> Usage could be something like:
> --------
> void main()
> {
> char [] s = "abcabcabab";
> // case insensitive search
> foreach(m; rexSearch!("ab+", "i")(s))
> {
> writefln("%s[%s]%s", m.pre, m.match(0), m.post);
> }
> }
> --------
>
> It would behave *exactly* like the existing std.regexp, except that
> compilation into the internal form would happen via template
> metaprogramming, so that
> (1) all errors would be caught at compile time, and
> (2) there'd be a minor speedup because the compilation step would not
> happen at runtime, and
> (3) otherwise it wouldn't be any faster than the existing regexp.
> However, there'd be no template code bloat, either.
>
> Existing code would be unchanged. You could even write:
>
> Regexp a = StaticRegExp!("ab?(ab*)+", "g");
>
> (assign a pre-compiled regular expression to an existing phobos RegExp).
>
> There's potentially a greater speedup possible, because the Regexp class
> could become a struct, with no need for any dynamic memory allocation;
> but if this was done, mixing runtime and compile-time regexps together
> wouldn't be as seamless. And of course there's load of room for future
> enhancement.
>
> BUT...
>
> The question is -- would this be worthwhile? I'm really not interested
> in making another toy.
> It's straightforward, but tedious, and would double the length of
> std.regexp.
> Would the use of templates be such a turn-off that people wouldn't use it?
> Do the benefits exceed the cost?
More information about the Digitalmars-d
mailing list