in not working for arrays is silly, change my view
aliak
something at something.com
Tue Mar 3 00:32:59 UTC 2020
On Monday, 2 March 2020 at 23:27:22 UTC, Steven Schveighoffer
wrote:
>
> What I think is happening is that it determines nobody is using
> the result, and the function is pure, so it doesn't bother
> calling that function (probably not even the lambda, and then
> probably removes the loop completely).
>
> I'm assuming for some reason, the binary search is not flagged
> pure, so it's not being skipped.
Apparently you're right:
https://github.com/dlang/phobos/blob/5e13653a6eb55c1188396ae064717a1a03fd7483/std/range/package.d#L11107
>
> If I change to this to ensure side effects:
>
> bool makeImpure; // TLS variable outside of main
>
> ...
>
> auto results = benchmark!(
> () => makeImpure = r1.canFind(max),
> () => makeImpure = r2.contains(max),
> () => makeImpure = r3.canFind(max),
> )(5_000);
>
> writefln("%(%s\n%)", results); // modified to help with the
> comma confusion
>
> I now get:
> 4 secs, 428 ms, and 3 hnsecs
> 221 μs and 9 hnsecs
> 4 secs, 49 ms, 982 μs, and 5 hnsecs
>
> More like what I expected!
Ahhhh damn! And here I was thinking that branch prediction made a
HUGE difference! Ok, I'm taking my tail and slowly moving away
now :) Let us never speak of this again.
>
> -Steve
More information about the Digitalmars-d-learn
mailing list