On Monday, 31 March 2014 at 13:05:24 UTC, bearophile wrote:
OK, thank you. So the price for that "in" is to use a dup :-) (Or use lower level code).

Bye,
bearophile

I'd think so yes. But given you are calling "array" for every iteration, it doesn't look like a ludicrous overhead.

That said, if you were reduce *into* your actual seed (the dup'ed array) instead of duplicating it on every iteration, it should be better.

I think your code is simplified, but consider this:

//----
uint[] foo3(const(uint[])[] X)
{
    assert(!X.empty);
    auto seed = X.front.dup;
    X.popFront();
    return reduce!((i, j) => i[] |= j[])
                  (seed, X);
}
//----

This gives the same "logical" result, but reuses the seed contents on every iteration.

Then, the original dup looks less gratuitous: You are allocating your result.

Reply via email to