On Tuesday, 4 February 2014 at 20:11:05 UTC, Chris Williams wrote:
On Tuesday, 4 February 2014 at 13:01:28 UTC, Dicebot wrote:
I find structs completely superior to classes as design base
and only resort to latter if find myself in need of
polymorphic behavior.
A person who is using Phobos has no option to switch to classes
when they find that they need polymorphic behavior, except by
copy-pasting into a new source file and revising the Phobos
code outside of Phobos.
"alias this" for the rescue again. You can a struct private
member of a class and alias it. If you want to override its
methods in class hierarchy you can generated wrapper methods in
class via D reflection capabilities and override those.
But opposite is much harder, and issues with std.typecons.scoped
show it.
If there aren't really any speed or size advantages of
significance, then what are you considering to make structs
superior? (I ask since I would rather make an argument for
struct-typing in the article, so people understand the
decision.)
Speed advantage can be huge on certain types of programs. Each
class is a reference type - this is first extra indirection. On
top of that every non-final class call requires virtual table
lookup - this is second extra indirection. And indirections can
cost a lot.
I have also mentioned another important concern - you can
easility turn struct into reference type by declaring pointer to
struct. You can't easily turn class into value type.