[Issue 4279] New: AAs change key type

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Jun 6 04:54:56 PDT 2010


http://d.puremagic.com/issues/show_bug.cgi?id=4279

           Summary: AAs change key type
           Product: D
           Version: unspecified
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: druntime
        AssignedTo: sean at invisibleduck.org
        ReportedBy: bearophile_hugs at eml.cc


--- Comment #0 from bearophile_hugs at eml.cc 2010-06-06 04:54:52 PDT ---
With DMD v2.046 this program prints  const(char)[]  instead of  char[] 


import std.stdio: writeln;
void main() {
    int[char[]] data = [cast(char[])"foo" : 1];
    foreach (key, val; data)
        writeln(typeid(typeof(key)));
}



Modifying AA keys after they are inserted in the AA is indeed bad because their
hash value and position inside the AA doesn't get recomputed.

But the current design/behaviour is surprising and bad, because I have asked
for a key type and the runtime/compiler gives me a different key type (forcing
me to use casts). There are two possible behaviours that I see acceptable here:

1) to disallow AAs with mutable keys, their literals and definition too (as
Python does), so in this case this variable definition becomes a compile-time
error:
int[int[]] data;
2) or to allow mutable keys (and hope the programmer will not mutate them) (as
I think D1 does), and keep their type unchanged (mutable).

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list