Rainer Deyke wrote:
Walter Bright wrote:
Rainer Deyke wrote:
The reason I have stuck with C++ despite its (massive, obvious) flaws is
that it has a couple of really nice and useful features that very few
other languages have even attempted to match. D is the only language I
know that even tries, although it still falls short in many areas.
Fair enough. What are those two features?
1. C++'s object model, complete with polymorphic value types,
What designs make good use of polymorphic value types?
deterministic destructors, arbitrary copy constructors, and optional
lack of default constructor.
Struct have that except for default constructor. In D, currently default
constructors cannot execute code. This is a limitation that we might
need to address, although it has some advantages.
D's structs come close, but I think the
class/struct split hurts D more than it helps. And, yes, C++ has a lot
of room for improvement here.
How does the class/struct split? I think it's an enormous source of
confusion for C++. C++ lore clarifies that you must decide in day one
whether a class is meant to be polymorphic or monomorphic. Unfortunately
that can't be expressed in the language, hence the weird cases with
deriving from std::vector or getting polymorphic values unceremoniously
sliced. Avoiding such mistakes are important things that C++ users must
learn because there's nothing in the language stopping them from doing
such nonsensical things; D very elegantly breaks that pattern by
defining the language to only allow meaningful constructs.
Who says the class/struct situation is worse off in D than in C++ either
doesn't know C++ or knows C++ too well.
Andrei