Has AA a bad implementation?

Steven Schveighoffer schveiguy at gmail.com
Sat Feb 13 01:01:28 UTC 2021

On 2/12/21 6:13 PM, Joseph Rushton Wakeling wrote:
> On Friday, 12 February 2021 at 22:23:45 UTC, Steven Schveighoffer wrote:
>> Note, I thought rehash would shrink the bucket array down, but it 
>> looks like it ignores that when the AA is empty. That seems like an 
>> omission.
> Do we necessarily want that shrinkage by default?  If an AA has had a 
> certain size in the past, and then is cleared, it seems likely that the 
> typical use case is that it will fill up to a similar size again.

The shrinkage happens by default if you remove an element and it goes 
below a threshold.

It does not shrink on clear (on purpose, for the reason you say).

> For comparison, does `rehash` shrink the bucket array when the AA is 
> non-empty but much, much smaller than the bucket array?

Yes. If it has one element, then it will resize the array.

> I don't object to the possibility to shrink the bucket array where 
> possible but it should probably require an explicit and unambiguous 
> request.

I think it already does shrink for a rehash. It's just set up to not 
shrink when the AA is "empty". I'm not really sure if it's a problem, 
just a weird inconsistency. Technically nobody should care about the 
bucket array, it's an implementation detail.


More information about the Digitalmars-d mailing list