D 2015/2016 Vision?

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Mon Oct 12 01:00:57 PDT 2015


On Monday, 12 October 2015 at 07:39:30 UTC, Kagamin wrote:
> On Thursday, 8 October 2015 at 14:05:07 UTC, Jonathan M Davis 
> wrote:
>> Maybe, but having classes be value generally makes no sense, 
>> because you can't use polymorphism with value types.
>
> If it doesn't make sense for reference types to be value types, 
> then your suggestion to use structs (value types) to implement 
> reference types doesn't make sense either.

My point is that without a level of indirection, polymorphism 
isn't involved. For polymorphism, you have a pointer or a 
reference of a base type, and it points/refers to an object of a 
derived type which then implements some of the functionality 
differently from the base. If you have a value type, there is no 
polymorphism, because there is no indirection. You're dealing 
with the exact type that the variable is. With a value type, all 
inheritance does is provide a way to reuse code (and not even a 
very good way to reuse code, since you can only derive from one 
type at a time). Inheritance's primary benefit is with 
polymorphism. Given that, it makes a lot of sense to use 
inheritance with objects on the heap and a lot less sense to use 
it for objects on the stack.

You can stick value types on the heap and pass around pointers or 
references to them, but then you're not dealing with 
polymorphism. You're just providing a way to have multiple pieces 
of code point operate on the same object, whereas passing it 
around on the stack means copying it. In some cases, ref would do 
the job just as well. But I wasn't really trying to say anything 
about whether value types made sense on the heap or anything like 
that. My point was entirely about polymorphism not applying to 
anything without using a pointer or reference.

- Jonathan M Davis


More information about the Digitalmars-d mailing list