www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 12785] New: Optimize with switches some associative array


          Issue ID: 12785
           Summary: Optimize with switches some associative array usage
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: DMD
          Assignee: nobody puremagic.com
          Reporter: bearophile_hugs 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.

May 21 2014