Jonathan M Davis:

http://d.puremagic.com/issues/show_bug.cgi?id=3934

Whether that'll change or not, I don't know, since it's not clear that Walter considers it to be a problem from what I
recall about his comments on discussions on it.

It's a significant problem because:
1) It's a _ridiculous_ situation. Allowing some of those things I've reported in bug 3934 is bad PR for D language. The DMD compiler looks incredibly sloppy compared to every other language compiler/interpreter, including old C compilers. It's about at 7.5 Mega KermitFrog sloppiness, that's almost PHP-level sloppy. 2) It makes much harder for D newbies to learn what's correct and what's not correct. When you are learning something new, you really want a strict teacher, otherwise you will have a much harder time learning what's correct (I've experimentally seen that even the total frienshipping inside D modules makes less easy to learn the usage of private/protected tags for new OOP D programmers). 3) It's confusing even for not newbie programmers, as Manu shows. And confusion is bad, error prone, makes people waste time, etc. 4) Different D compilers will be sloppy in slightly different ways, this means D code will not be portable across different compilers.


struct S
{
static x;
__gshared y;
}

What is the difference between x and y here?

x is in TLS, so there's one instance per thread. I'm not quite sure whether __gshared does anything here though, since it's a member variable rather than a class variable or module-level variable. I expect that __gshared is ignored
here, but I don't know.

I expect __gshared to not be ignored here. I think "__gshared" there is the same thing as "__gshared static".

Bye,
bearophile

Reply via email to