range behaviour

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Tue May 13 10:44:30 PDT 2014


On Tue, 13 May 2014 10:30:47 -0700
"H. S. Teoh via Digitalmars-d" <digitalmars-d at puremagic.com> wrote:
> Of course, for efficiency purposes range-based code (esp. Phobos code)
> should try their best to only call .front once. But it should be
> perfectly permissible to call .front multiple times.

Oh, but that's part of the fun. If the range's front returns by ref or auto
ref - or if it actually made front a public member variable - then it would be
_less_ efficient to assign the result of front to a variable in order to avoid
calling front multiple times. Much as ranges have a defined API, there's
enough flexibility in the API and in how it's implemented for any given range
that generalities about what is more or less efficient or which is more or
less likely to avoid unintended behaviors isn't a sure thing - which is part
of why that particular discussion was instigated in the first place and why
discussions about stuff like whether front can be transitive or not keep
popping up from time to time.

In general, it's probably better to avoid calling front multiple times though
- the issue with map being a prime example of where the problem can be worse
than simply an issue of efficiency - and in most cases, ranges don't have a
front which returns by ref or auto ref. But unfortunately, because that's just
_most_ cases, it does make it so that we can't make a blanket statement about
what is more or less efficient.

- Jonathan M Davis


More information about the Digitalmars-d mailing list