On 12 November 2013 18:09, Don <[email protected]> wrote: > On Monday, 11 November 2013 at 11:39:06 UTC, Daniel Murphy wrote: > >> "Manu" <[email protected]> wrote in message >> news:[email protected]... >> >>> immutable string[string] priorityMap = [ >>> "1" : "blocker", >>> "2" : "critical", >>> "3" : "critical", >>> "4" : "major", >>> "5" : "major", >>> "6" : "major", >>> "7" : "minor", >>> "8" : "minor", >>> "9" : "trivial" ]; >>> >>> main.d(56): Error: non-constant expression ["1":"blocker", >>> "2":"critical", >>> "3":"critical", "4":"major", "5":"major", "6":"major", "7":"minor", >>> "8":"minor", "9":"trivial"] >>> >>> This is tedious, how long has it been now? >>> Seriously, static map's are super-important, they should be able to be >>> made >>> immutable, and also be able to be initialised. >>> >>> Maybe this could be factored into the improvements for 2.065? >>> >>> >> I think yes, it can be done for 2.065. Someone remind me if we get close >> and it isn't done yet. >> > > > IIRC the poor performance of array literals and AA literals is because > they're not always literals, sometimes they are variables (!) and the > compiler assumes the worst case. You are allowed to write: > > void foo(int some_param) > { > immutable string[int] = [ 1: "abc", some_param: "def"]; > } > > I wish we could get rid of that silliness entirely. > > > If the members are compile-time expressions, you probably want to mark the > variable as static const/static immutable. >
I've also had this thought. Logically, you shouldn't need to declare an immutable thing static (although currently, you do), although the advantage would be a guaranteed compile error if you try to do something silly like initialise from a variable.
