OK, looked at it for a while, I wasn't clear originally on what Appender is 
exactly supposed to do.

I found a superficial bug before I wrote the message below -- you were stomping 
over the capacity without rewriting it.

But in general, I think the method you are using to store the capacity is 
flawed.  It's prone to stomping (i.e. using appender on a slice) and it's 
somewhat inefficient (you are constantly re-storing the capacity).  It's going 
to run into problems if you try using ~= on an array that you appended to with 
Appender.

Part of the problem is that Appender is trying to apply its metadata to an 
existing array.  Appender is using data it doesn't own or isn't given 
permission 
to change.  This can be bad on many levels (including violating immutability 
rules).

I'd recommend scrapping Appender as written and creating one that does the 
following:

1. if initialized with an existing array, initialize capacity to 0, forcing a 
realloc on first append
2. Store the capacity outside the array data (i.e. in a heap-allocated 
array+capacity struct).

Yes, 1 can be inefficient but it errs on the side of safety.  Once it 
reallocates the first time, it will be very efficient.  This works as long as 
the assumption is that you use Appender to append large amounts of data.

I'll work on a proposed replacement Appender struct, it shouldn't take too long.

-Steve


----- Original Message ----
> From: Andrei Alexandrescu <[email protected]>
> To: Discuss the phobos library for D <[email protected]>
> Sent: Wed, August 25, 2010 9:09:33 AM
> Subject: Re: [phobos] I think we need to make an emergency release
> 
> Thanks, and also thanks for announcing this. I was about to start 
> looking at  it...
> 
> Andrei
> 
> On 8/25/10 6:08 PDT, Steve Schveighoffer  wrote:
> > I think I know the problem with the code. I'll check in a fix,  and update 
>the
> > bug, see if it helps.
> >
> >  -Steve
> >
> >
> >
> > ----- Original Message ----
> >>  From: Don Clugston<[email protected]>
> >>  To: Discuss the phobos library for D<[email protected]>
> >>  Sent: Tue, August 24, 2010 3:35:09 PM
> >> Subject: [phobos] I think we  need to make an emergency release
> >>
> >> David suggested we  need an emergency release for the array appender
> >> bug, and  I'm  inclined to agree with him. My personal experience is
> >> that it makes  2.048  unusable, and I've had to go back to 2.047. Here's
> >> the  bug:
> >>
> >> Bug 4681  Appender access  violation
> >> This is a really horrible memory corruption   regression, caused by svn
> >> 1813. Is there any reason we shouldn't  just roll  that back?
> >>
> >> ---
> >> BTW, one  compiler bug popped up in the last release,  too. Fairly
> >>  obscure though. I created a patch:
> >> 4655 Regression(1.063,   2.048) goto to a try block ICEs
> >>
> >> I also made a patch for  this compiler bug  from three releases back:
> >> 4302  Regression(1.061, 2.046) compiler errors using  startsWith in  CTFE
> >>
> >> All other known compiler regressions were  introduced  in 2.041 or  
earlier.
> >>  _______________________________________________
> >> phobos mailing   list
> >> [email protected]
> >>  http://lists.puremagic.com/mailman/listinfo/phobos
> >>
> >
> >
> >
> >  _______________________________________________
> > phobos mailing  list
> > [email protected]
> > http://lists.puremagic.com/mailman/listinfo/phobos
> _______________________________________________
> phobos  mailing list
> [email protected]
> http://lists.puremagic.com/mailman/listinfo/phobos
> 


      
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to