Contract checking (Re: enforce()?)

Norbert Nemec Norbert at Nemec-online.de
Sun Sep 12 22:51:59 PDT 2010


On 12/09/10 14:48, bearophile wrote:
> Norbert Nemec:
>
> Thank you for your clear explanations of the situation.
>
>> With FP/DG, this breaks
>> down and I believe the best one can do is to implement contracts as
>> run-time checks in the callee, just as it is done in D.
>
> There is also a mixed strategy: to use run-time checks in the callee for FP/DG, and something better for the other situations (FP/DG are present in D2 programs, but they aren't used everywhere).

Indeed - this would mean a bare, unchecked interface for each function 
and a wrapper that adds contract checks. If the calling code can verify 
the contract at compile time, it may call the unchecked version. 
Otherwise (like with FP/DG), it will call the checked wrapper.

In fact, this could be understood like a kind of type-casting: A 
function interface includes the contract as part of the type 
information. If the contract is "casted" away (by assigning the function 
to a FP that does not include a contract) the the FP points to the 
run-time checked version of the routine.

This concept may even open the road towards FP/DG that include contract 
information without getting in the way of lightweight, contract-free 
FP/DGs as we have them now.

Greetings,
Norbert


More information about the Digitalmars-d mailing list