digitalmars.D.learn - static initialization of associative arrays
- Tyro[a.c.edwards] (19/19) Apr 15 2009 Is it yet possible to statically initialize an associative array? If so,...
- novice2 (1/1) Apr 15 2009 may be you can raplace string with char[] ?
- Daniel Keep (9/38) Apr 15 2009 I think Walter said something a while back to the effect that making it
- bearophile (5/8) Apr 15 2009 At the moment you can't statically initialize a built-in AA in D.
- grauzone (1/2) Apr 15 2009 Syntax. Read the first post of this thread.
Is it yet possible to statically initialize an associative array? If so, please point me to the documentation. I am using DMD v2.028. Currently I'm able to do this: import std.stdio; string[string] types; static this(){ types = [ "void":"void", "bool":"bool" ]; } void main(){ writeln(types); } Output = [void:void,bool:bool] which is exactly what I want. However, removing static this() results in an error. string[string] types = [ "void":"void", "bool":"bool" ]; Result: api.d(77): Error: non-constant expression ["void":"void","bool":"bool"] How do I make the initialization constant? Thanks, Andrew
Apr 15 2009
Tyro[a.c.edwards] wrote:Is it yet possible to statically initialize an associative array? If so, please point me to the documentation. I am using DMD v2.028. Currently I'm able to do this: import std.stdio; string[string] types; static this(){ types = [ "void":"void", "bool":"bool" ]; } void main(){ writeln(types); } Output = [void:void,bool:bool] which is exactly what I want. However, removing static this() results in an error. string[string] types = [ "void":"void", "bool":"bool" ]; Result: api.d(77): Error: non-constant expression ["void":"void","bool":"bool"] How do I make the initialization constant? Thanks, AndrewI think Walter said something a while back to the effect that making it possible to statically initialise AAs isn't feasible because it requires setting up a complex structure on the heap. The best you could do would be to *pretend* to statically initialise them, and actually really initialise them in a module ctor. Which is exactly what you currently have to do. Could be wrong; that's just what I remember from the last time this came up. -- Daniel
Apr 15 2009
Daniel Keep:I think Walter said something a while back to the effect that making it possible to statically initialise AAs isn't feasible because it requires setting up a complex structure on the heap.At the moment you can't statically initialize a built-in AA in D. But with a small change in D AAs such memory may be allocated statically too, when the program starts. What's the advantage of doing this? Having quicker startup times? Bye, bearophile
Apr 15 2009
What's the advantage of doing this? Having quicker startup times?Syntax. Read the first post of this thread.
Apr 15 2009