Boost logo

Boost :

Subject: Re: [boost] [contract] syntax redesign
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2011-09-27 14:29:33


> I think option B (current) is still better than option A because A
requires
> (1) more parenthesis and (2) the extra assertion word spelled out all the
> times but A doesn't require the trailing `,` which is a plus.

> Do you have a strong opinion about which one is better between A and B?
I'd
> say B is better but I'm quite biased at this point ;)

Hi Lorenzo,
Since you ask about personal preference, I think mine is option A. I can
think of the following reasons:

* Given the fairly complicated syntax for Boost.Concepts, option A appears
to me to add more structure to the declaration, and makes parsing it easier.
Especially that I imagine you could further simplify it:
  instead: var(auto old_size = CONTRACT_OLDOF size())
  could be: var( old_size = CONTRACT_OLDOF size() )

* Since you put each assertion (or declaration) in a separate line anyway
option B appears also elegant, but if someone starts putting multiple
assertions in the same line, I think option A would be clearer. Compare:

  postcondition( x - 1 == y + 2, y - 1 == z + 2 )
  postcondition( assert(x - 1 == y + 2) assert(y - 1 == z + 2) )

* If anyone writes a tool for generating documentation from Contracts, I
think parsing would be easier with option A.

* In option A, it is easier to tell assertions from declarations, I can
easily count how many things are asserted

* I suspect that you can use commas more freely inside assertion(), which
reduces the necessity of using "identity" function workaround.

But I could hardly call it a strong opinion. It is just my preference, and I
will like Boost.Contract with either syntax.

Regards,
&rzej


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