[Issue 12785] New: Optimize with switches some associative array usage idioms

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Wed May 21 16:23:00 PDT 2014


https://issues.dlang.org/show_bug.cgi?id=12785

          Issue ID: 12785
           Summary: Optimize with switches some associative array usage
                    idioms
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: DMD
          Assignee: nobody at puremagic.com
          Reporter: bearophile_hugs at eml.cc

In D there are handy associative array literals, so D code contains idioms that
are more typical of dynamic languages as Python:


size_t foo(in char c) {
    immutable size_t[char] indexer =
        ['D': 2, 'R': 5, 'C': 8, 'H': 9, 'W': 0];
    return indexer[c];
}


size_t foo(in char c) {
    return ['D': 2, 'R': 5, 'C': 8, 'H': 9, 'W': 0][c];
}


So I suggest to add to D front-end an optimization, that rewrites those usages
of associative arrays with a switch:

size_t foo(in char c) {
    size_t value = size_t.max;
    switch (c) {
        case 'D': value = 2; break;
        case 'R': value = 5; break;
        case 'C': value = 8; break;
        case 'H': value = 9; break;
        case 'W': value = 0; break;
        default: assert(false);
    }
    return value;
}


This should be faster, avoid GC activity, and produce simpler binaries.

--


More information about the Digitalmars-d-bugs mailing list