[phobos] Would you find a ByRef range useful?

Lars Tandle Kyllingstad lars at kyllingen.net
Mon Jun 6 03:11:42 PDT 2011


On Mon, 2011-06-06 at 02:52 -0700, Jonathan M Davis wrote:
> On 2011-06-06 02:33, Lars Tandle Kyllingstad wrote:
> > Sorry for not following up on this earlier, I got busy with other things
> > and completely forgot about it.
> > 
> > On Thu, 2011-05-19 at 18:28 -0400, Robert Jacques wrote:
> > > On Thu, 19 May 2011 18:09:09 -0400, Lars Tandle Kyllingstad
> > > 
> > > <lars at kyllingen.net> wrote:
> > > > I can't really see any elegant way to implement save() for such a
> > > > range, though, and without save() it doesn't qualify as a forward
> > > > range, a bidirectional range or a random-access range -- at least not
> > > > as defined by isForwardRange & co.  Is there then any point in
> > > > implementing the remaining primitives?
> > > > 
> > > > -Lars
> > > 
> > > Well, any routine which uses byRef internally, like I do, won't
> > > necessarily care about save, but might use indexing/slicing if available.
> > > 
> > > Besides, what's wrong with something like:
> > > 
> > > static if(/*...*/)
> > > ByRef save()
> > > {
> > > 
> > > 	auto ptr = new Range;
> > > 	*ptr = (*_range).save;
> > > 	return byRef(ptr);
> > > 
> > > }
> > 
> > A memory allocation hidden away in a function which is normally very
> > cheap.  I've somehow gotten the impression that algorithms can use
> > save() without worrying about its cost.  After all, in most cases it is
> > simply implemented as "return this" or similar.  If it turns out that
> > save() makes no such guarantee, I don't see a problem with the
> > implementation you suggest.
> 
> That's one of the main reasons for the debate on whether postblits can/should 
> be assumed to be cheap. If they are, then algorithms can assume that save is 
> cheap and be coded accordingly. If they're not, then calling save potentially 
> becomes something to be avoided whenever possible. But regardless of whether 
> save can be assumed to be cheap, it _definitely_ has the potential to allocate  
> memory. And if something critical to a range is on the heap, then you should 
> definitely expect a heap allocation in save.
> 
> Unfortunately, I'm not sure where the debate on postblits and cost is. As I 
> recall, it was pretty much decided that postblits could be assumed to be 
> cheap, but then issues with COW and reference counting being properly possible 
> (due to bugs in the compiler I suspect, but I don't recall all of the details) 
> made it so that decision wasn't as firm IIRC. I think that we still have all 
> of the move functions in ranges though, and getting rid of them was one of the 
> main goals of assuming that postblits was cheap. So, I really don't know what 
> the situation with all that is right now.
> 
> But yes. In general, I believe that save is assumed to be fairly cheap.

Ok, thanks.  That cleared things up -- at least to the extent
possible. :)

-Lars



More information about the phobos mailing list