new std.variant (was Re: The Right Approach to Exceptions)
Robert Jacques
sandford at jhu.edu
Wed Feb 22 12:24:49 PST 2012
On Wed, 22 Feb 2012 13:12:07 -0600, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:
> On Wednesday, February 22, 2012 12:16:43 Robert Jacques wrote:
>> There's a big difference between sealed and not accessible. .data's API
>> requires exposing an array, and there's no way to do this without
>> leaking
>> memory like a sieve in one way or another. However, if all you need is
>> to
>> iterate the contents, that's easy to do. I'm currently adding backwards
>> iteration. Even indexing is fairly efficient (not yet implemented),
>> particularly relative indexing (i.e. n from back or front).
>>
>> I haven't seen too many use cases yet where accessing the underlying
>> array
>> is important, nor has it come up on bugzilla. I've found one case in
>> Phobos where appender was used as a stack. What's your example? What
>> features does it have to support and how efficient does it have to be?
>
> It's can be useful to just get at the underlying array and pass it to
> functions which are going to use it but not alter it (or at least not
> append
> to it). Iterating over it doesn't give you an array. And since appender's
> entire purpose is simply to make appending to an array more efficient,
> making it
> impossible to treat it as one until you're done appending is overly
> restrictive IMHO. Yes, if you leak references to the underlying data,
> you're
> asking for trouble, but that doesn't mean that it can't be used without
> leaking memory.
>
> Unfortunately, I don't have any code snippets with me at the moment, so I
> can't give any concrete examples of usage, but any situation where you
> want to
> be able to operate on the array while building it needs the ability to
> get at
> the underlying array. Yes, in most cases, you're probably simply
> appending to
> the array, but at least once in a while, you need to operate on an array
> while
> building it.
>
> - Jonathan M Davis
I view appender's purpose as array building, which is slightly different
from simply speeding up array appending. Simply put, an array is a
terrible data structure for building arrays. But, I can appreciate the
need for mutation and if a particular array building algorithm can't be
performed on appender, then appender has failed. Would exposing a
bidirectional array be sufficient for your usages? A random access range?
More information about the Digitalmars-d
mailing list