General problem I'm having in D with the type system
IntegratedDimensions
IntegratedDimensions at gmail.com
Sun May 27 20:50:14 UTC 2018
On Sunday, 27 May 2018 at 18:16:25 UTC, JN wrote:
> On Sunday, 27 May 2018 at 06:00:30 UTC, IntegratedDimensions
> wrote:
>> animal a = new cat();
>>
>> a.f = new food()
>> auto c = cast(cat)a;
>>
>>
>> as now f in cat will be food rather than catfood.
>
> I think the problem is in your hierarchy. If Animal can have
> Food, that means that any animal should be able to accept any
> food, without knowing what kind of food is this. Cat requiring
> cat food is a leaky abstraction, the cat shouldn't know nor
> care what kind of food it gets, as it's an animal and it will
> eat any food.
This is clearly false.
A Kola does not eat any type of food, nor does a whale or most
animals.
While it is just an example, it still applies in general. Natural
transformations are fundamental to type theory.
The only problem where it can leak is when we treat an cat as an
animal then put in dog food in to the animal, which is valid when
cat as treated as an animal, then cast back to cat. Now cat has
dog food, which is invalid.
But I've already pointed out two things about this: 1. The
hierarchy is maintained to be non-leaky at runtime(I never down
cast). 2. casting can be designed to handle this behavior. When
we cast animal to cat then the cast can null dog food since it
isn't cat food. No different than if we cast animal to hammer but
requires a bit more compiler logic.
More information about the Digitalmars-d
mailing list