On Friday, 20 April 2012 at 15:06:42 UTC, H. S. Teoh wrote:
On Fri, Apr 20, 2012 at 02:07:05PM +0200, SomeDude wrote:
On Thursday, 19 April 2012 at 19:31:36 UTC, H. S. Teoh wrote:
[...]
>Believe me, I would rather not have immutable keys if I could >help
>it, because it makes things so much simpler. However:
>
>(1) It leads to subtle breakages due to unintended aliasing:
>
>    int[int[]] aa;
>    int[] key1 = [1,2,3];
>    aa[key1] = 123;
>    key1[0] = 2;    // uh oh!
>    assert(aa[[1,2,3]] == 123);     // assertion fails, key has
>                                    // changed without AA's knowledge
>

Yeah, I thought about that, but then it's the programmer's
responsibility to not shoot himself in the foot, and if he wants to be safe, he can still declare his keys immutable from the start. My concern is imposing a useless copy upon the programmer who has mutable keys for the sake of using the AA. There should be zero overhead. If for some reason he is forced to do that, he will end up writing his
own implementation.

Copying is only done when actually adding a new key to the AA. For example, since char[], const(char)[], and string (==immutable(char)[]) are all mutually comparable, nothing needs to be copied until the key needs to be put inside the container, at which point it seems reasonable
to copy it. Pure lookups and stuff have no overhead.


OK, thank you for clearing up my mind.

Reply via email to