dsimcha wrote:
== Quote from Joel C. Salomon (joelcsalo...@gmail.com)'s article
dsimcha wrote:
Is there an *efficient* way to simply test whether a given string contains a
given regex in the new std.regex?  Using match() and testing for empty works,
but this apparently triggers a bunch of unnecessary heap allocation.  If not,
is this a universal enough feature to warrant an enhancement request?
You mean to search for a regex match without constructing the regex
engine?  Good luck with that.
—Joel Salomon

Actually, the behavior Andrei describes is what I wanted:  One allocation to
construct the regex engine, amortized.  However, contrary to what Andrei said,
match() apparently allocates additional memory on each call.  The following
program leaks memory like a sieve when the GC is disabled:

import std.regex, core.memory;

void main() {
    string s = "This is only a test.  Repeat, this is only a test.";
    auto r = regex("is.only");

    GC.disable;
    while(true) {
        auto m = match(s, r);
    }
}

Ah... Sigh, I meant to implement the short string optimization in the regex range, and put it off forever. It was about time it would come back to haunt me :o).

Could you please submit an enhancement request to Bugzilla? Maybe with a patch? :o)


Andrei

Reply via email to