DMD 1.035 and 2.019 releases
Tomas Lindquist Olsen
tomas at famolsen.dk
Thu Sep 4 04:44:30 PDT 2008
Walter Bright wrote:
> bearophile wrote:
>> Walter Bright:
>>> If there's any constructor defined for S, then S(args) is a
>>> constructor call. If there's any opCall defined for S, then S(args)
>>> is an opCall call. Otherwise, it's a struct literal.
>>
>> I haven't tried that in real code, so I can't be sure, but while it
>> may work for the compiler, it sounds a bit too much complex for the
>> person that later reads the code. Too many alternative possibilities
>> may make the code more complex to follow.
>>
>> To reduce such ambiguity (ambiguity for the person, not for the
>> compiler) may be to change the syntax of struct literals...
>
> I disagree, I think just the reverse. The S(args) syntax means that it's
> entirely up to the struct designer to say how it should work. The user
> needn't know or care, and the struct designer can change the design
> without affecting user code.
>
This is one of those things I really dislike about D :(
It's really nice that we can override struct initialization, but the fact that it eliminates
the possibility to override it (with a nice syntax) makes it much less appealing IMHO.
The most important point to me, is that old thing about static struct initializer and struct
literals have different syntaxes, and that the static variant is much more flexible.
I would have loved to see the static struct initializer syntax become an expression. If the
problem is ambiguity, why not just prefix the {} braces with the struct name?
struct S
{
int a;
float b;
}
const s = S{1, 2.0};
const t = S{b:3.14};
void foo()
{
auto st = S{4,5.5};
}
(also not that it's currently impossible to use type inference with the current static struct
initializers)
This would eliminate the gripe most people have with this I think, as well as making static and
non-static initializers consistent. like they are *for all other types*.
I can't help feel structs (like static arrays) aren't first class citizens in D. Even with the
latest additions in D2. It hurts, and is just one of those small reasons why I sometimes regret
I even joined this community...
My 2 cents on this, I think it's a big mistake going against the wishes of the D community. If
I'm wrong, let me know.
-Tomas
More information about the Digitalmars-d-announce
mailing list