[Issue 3849] Compiler should catch incomplete initialisation of an	array
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue May 28 04:45:28 PDT 2013
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=3849
--- Comment #20 from bearophile_hugs at eml.cc 2013-05-28 04:45:25 PDT ---
A small example why enforcing array lengths match improves safety of D
programs. This part of a program uses strings to define a binary decision
table, but it's easy to make mistakes in the strings:
struct DataPair { string message, truth; }
immutable DataPair[] solutions = [
    {"Check the power cable",                "..#....."},
    {"Check the printer-computer cable",     "#.#....."},
    {"Ensure printer software is installed", "#.#.#.#."},
    {"Check/replace ink",                    "##..##.."},
    {"Check for paper jam",                  ".#.#...."}];
An improvement is to use fixed-sized arrays so the compiler catches some bugs
at compile-time:
struct DataPair(uint N) {
    string message;
    immutable(char)[N] truth;
}
immutable DataPair!8[] solutions = [
    {"Check the power cable",                "..#....."},
    {"Check the printer-computer cable",     "#.#....."},
    {"Ensure printer software is installed", "#.#.#.#."},
    {"Check/replace ink",                    "##..##.."},
    {"Check for paper jam",                  ".#.#...."}];
But currently the compiler only gives an error if you add one more char:
    {"Check the power cable",                "..#......"},
And not if you miss one:
    {"Check the power cable",                "..#...."},
And this is not a nice solution also because  most D programmers don's write
code like this:
immutable DataPair!8[] solutions = [
    {"Check the power cable",                "..#.....".fixed},
    {"Check the printer-computer cable",     "#.#.....".fixed},
    {"Ensure printer software is installed", "#.#.#.#.".fixed},
    {"Check/replace ink",                    "##..##..".fixed},
    {"Check for paper jam",                  ".#.#....".fixed}];
-- 
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