On 28 May 2017 at 13:30, Ola Fosheim Grøstad via Digitalmars-d <digitalmars-d@puremagic.com> wrote: > On Sunday, 28 May 2017 at 09:09:39 UTC, Iain Buclaw wrote: >> >> However, for extern(D) classes, there's actually nothing stopping a D >> compiler implementer from making class types more memory efficient, an >> optimizing compiler could decide to re-arrange class fields as: >> >> class Something >> { >> long b; >> int a; >> char c; >> } > > > Yes, but you could do that for structs as well, after static analysis > establishing that it no code in this specific program is making assumptions > about layout. > > Or you could have an attribute that says that that field X should be at > byte-offset N, but all other fields can move. > >> As a side note, when I talked about D at the GNU Hackers Meeting a number >> of years back, when I said that structs and classes are two distinct types - >> one being POD-only, the other being a reference that comes with the bells >> and whistles of OOP - I actually got a small cheer. This gives me a very >> strong impression of what C++ programmers think of their own situation >> regarding struct vs class, and that we should not be so eager to follow >> their design. > > > Did they explain why? Many other languages provide a single construct with > far more wide-ranging features than D/C++. >
I said it all in one breath, so you could leave it up to interpretation whether they applauded the fact that there is a separation in semantics, or whether there is no multiple inheritance in D (except via interfaces). When asking one person over dinner later about what they felt was wrong about struct/class in C++, I got the impression that because there's almost no distinction between the two, class seems more like a misfeature of C++. You could say that C++ should have stuck to one type, instead of having two. And because in D we make a very clear distinction, that justifies the reason to have both struct and class.