On Sunday, 15 May 2022 at 15:26:40 UTC, Kevin Bailey wrote:
I'm trying to understand why it is this way. I assume that
there's some benefit for designing it this way. I'm hoping that
it's not simply accidental, historical or easier for the
compiler writer.
Perhaps someone more informed will chime in, but there is a
reason to avoid object inheritance with value types, and force
them to be reference types.
https://stackoverflow.com/questions/274626/what-is-object-slicing
If we want to avoid that problem, then object with inheritance
and virtual functions have to be reference types.
But you still need values types. So now you have both struct and
class, like in C# (Hejlsberg, 2000).
For an escape hatch, D has library ways to have structs with
virtual functions (there is a DUB package for that), and classes
on the stack (Scoped!T, RefCounted!T, a __traits).