Boost logo

Boost :

Subject: Re: [boost] AlRangeExandrescu?
From: Andrei Alexandrescu (andrei_at_[hidden])
Date: 2009-07-24 19:50:34


Rogier van Dalen wrote:
> On Thu, Jul 23, 2009 at 13:48, David Abrahams<dave_at_[hidden]> wrote:
>> Hi Neil,
>>
>> I'm sure someone already spoke to you about this, but just in case: Andrei
>> Alexandrescu gave a very interesting presentation at BoostCon that was based
>> on a "ranges only" approach that should eliminate issues like this one:
>
> That looks very interesting. Is there any documentation on this out
> there? I found the slides:
>
> http://www.boostcon.com/site-media/var/sphene/sphwiki/attachment/2009/05/08/iterators-must-go.pdf
>
> and documentation for a D implementation:
> http://www.digitalmars.com/d/2.0/phobos/std_algorithm.html
> http://www.digitalmars.com/d/2.0/phobos/std_range.html
>
> I'm wondering why "popFront()" is mutable and edits the range rather
> than return a range without the first element. The latter might allow
> compile-time heterogeneous sequences (like boost::fusion::vector) to
> conform to this range concept as well. I just realised you could then
> write a foreach function that works on both homogeneous and
> heterogeneous sequences basically like:
>
> template <class Range, class Function>
> void foreach (Range range, Function function)
> {
> if (!range.empty())
> {
> function (range.front());
> foreach (range.popFront(), function);
> }
> }
>
> Is popFront() mutable just for efficiency? Or is there something else
> I'm missing?

It's only efficiency. I was very attracted to popFront returning the new
range (100% functional interface!) but I gave up for efficiency reasons.
I didn't want iteration with ranges to be cool and iteration with other
means to be efficient.

Andrei


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk