Boost logo

Boost :

Subject: Re: [boost] [contract] Contract Programming Library
From: Lorenzo Caminiti (lorcaminiti_at_[hidden])
Date: 2010-02-18 23:45:12


Hello Andrzej,

Sorry, I realize I did not complete the loop example:

void f(std::vector v, const size_t& n) {
   size_t i = 0;
   CONTRACT_ASSERT_BLOCK_INVARIANT( i == 0 ); // Block inv.
   for (CONTRACT_INIT_LOOP_VARIANT; i < v.size(); ++i) {
       CONTRACT_ASSERT_BLOCK_INVARIANT( i < v.size() ); // Block inv
as loop inv.
       CONTRACT_ASSERT_LOOP_VARIANT( v.size() - i ); // Loop variant.
       ...
   }
}

On Tue, Feb 16, 2010 at 3:01 PM, Andrzej Krzemienski <akrzemi1_at_[hidden]> wrote:
> use a medium size range, the performance can kill me. I would like to
> disable checking of this assertion, but at the same time there is no
> reason to disable others. Would you consider providing a way to
> selectively disable asserts? some assertion level?

Yes, I will consider this in the future. Also, I might want to check
inv/pre/post for most of the classes I compile but not for a few
templates part of a library that I trust (e.g., Boost). So it would be
nice to select different contract checking levels (at least at
run-time) based on class name or similar.

> (2).
> Usually public member functions would be used to express DbC
> assertions. Do you disable assertions in public functions that are
> called only to evaluate other assertions in order to avoid recursive
> calls?

Yes, the library policy is to disable assertion checking within
assertions and to disable class invariants checking for nested
function calls (public or not) (requirements from [Meyer1997],
[Ottosen2004], and [Crowl2006]). Different policies could be
implemented but this one avoids infinite recursion well in my
experience.

Regards,
Lorenzo


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk