Broken contract programing
Idan Arye via Digitalmars-d
digitalmars-d at puremagic.com
Wed May 13 11:32:15 PDT 2015
On Wednesday, 13 May 2015 at 17:47:27 UTC, Ola Fosheim Grøstad
wrote:
> On Wednesday, 13 May 2015 at 14:54:05 UTC, Benjamin Thaut wrote:
>> On Wednesday, 13 May 2015 at 12:54:52 UTC, Timon Gehr wrote:
>>> This will accept the same arguments as Base. Only one
>>> in-contract in the inheritance chain must pass in order for
>>> the call to go through.
>>
>> But wasn't exactly that the problem about the current
>> implementation? Shouldn't all 'in' contracts in the chain be
>> checked?
>
> The topic is non-trivial. Dart has even deliberately picked an
> unsound inheritance typing-model because it is more useful.
> Consider the following scenario:
>
> You have a superclass Shelter, then you create subclass
> DogShelter. The Shelter has a virtual function add_pet(Animal
> x) . So clearly the DogShelter will have to accept the _type_
> Animal in its add_pet specialization because of the type system.
>
> That does not mean it is not a bug if you bring a Cat to the
> DogShelter. It merely means that you cannot catch such bugs
> with the type system alone. The DogShelter might sit behind
> another infrastructure that is supposed to prevent non-Dog
> animals from entering.
>
> So it makes sense to not conflate invariants/contracts with the
> type system.
http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29
More information about the Digitalmars-d
mailing list