D 2015/2016 Vision?
Jonathan M Davis via Digitalmars-d
digitalmars-d at puremagic.com
Thu Oct 8 07:05:05 PDT 2015
On Thursday, 8 October 2015 at 08:21:09 UTC, Kagamin wrote:
> On Tuesday, 6 October 2015 at 20:31:58 UTC, Jonathan M Davis
> wrote:
>> I don't think the problem is with structs. The problem is that
>> programmers coming from other languages default to using
>> classes. The default in D should always be a struct. You use a
>> class because you actually need inheritance or because you
>> want to ensure that a type is always a reference type and
>> don't want to go to the trouble of writing a struct that way
>> (and even then, you should probably just write the struct that
>> way).
>
> Hmm... If we must emulate reference semantics manually, it
> feels like C++ with explicit references, pointers and all sorts
> of smart pointers, and obviates need for classes being
> reference types: just emulate reference semantics as we must do
> it anyway.
Maybe, but having classes be value generally makes no sense,
because you can't use polymorphism with value types. Classes are
inherently reference types given their semantics. Even in C++
that's the case. It's just that they don't separate out classes
and structs the way we do. But classes that use inheritance have
to be used as reference types or all you're doing is sharing
implementation (which can be done easily enough without
inheritance). You're not doing anything with polymorphism without
references. So, the separation that D has makes a lot of sense.
It's just that in some cases - namely where determinstic
destruction is required - having them be managed by the GC
doesn't work, and we need a solution for that. Most classes work
just fine with a garbage collector though.
And if we have classes that are inherently ref-counted or which
are sitting inside of smart-pointers, then they're still
reference types like they should be. They just have their
lifetime managed in a more deterministic manner for those cases
where that's appropriate.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list