digitalmars.D - Struct initializers
- bearophile (19/19) Oct 27 2008 (This comes after a little chat in #D).
(This comes after a little chat in #D). This shows a syntax to initialize structs: struct S { int x; } S s1 = {1}; // OK S[] sa1 = [{2}]; // OK void main() { S s2 = {3}; // OK // S[] sa2 = [{4}]; // Error: array initializers as expressions are not allowed } But it's limited, works only for structs in the static data segment. D has another more flexible syntax for struct initialization, in this case is for example: auto s3 = S(5). I can see few possibilities: 1) All situation can be kept as it is now. 2) The {fields...} syntax to initialize structs can be extended, making it usable for structs in non static data too (I think this doesn't break the compatibility with C code because it's just an extension). Such syntax has the advantage of being a little shorter, because you don't need to repeat the name of the struct many times, for example when you write an array literal of structs. 3) The {fields...} syntax can be removed, because the Structname() is enough. This has the advantage of removing a little of complexity from the language, and frees the {x,y,...} syntax for other purposes, for example to represent a set literal (as used in Python3 for example). The disadvantage is that C programmers have to adapt when using D, because a syntax they are used to can't be used anymore in D. Another small disadvantage is that when porting C code to D you need to modify a little the syntax of the struct initializers. I am not sure what I like more. I think the solution 3 looks a little better, but it has some disadvantages too. Bye, bearophile
Oct 27 2008