Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-10-08 13:18:19


Daniel Wallin <dalwan01_at_[hidden]> writes:

>>At that point, it might not contain any of the types you wanted. It almost
>>becomes equivalent to a design Eric rejected, where the variant can be empty.
>
> I don't yet buy that this is a problem for generic programming;
>
> If variant is part of the program interface, the type shouldn't be changed
> anyway, so "wanting the benefit of the optimization" becomes the users
> problem.
>
> If the variant is part of the implementation, where the type
> sequence is part of the interface, the invariant type is just an
                                         ^^^^^^^^^???
> implementation detail, or part of the program documentation.

Let me try again:

- the variant design has a nice invariant that it contains one of the
  types that were passed as template arguments

- if a library takes a user's list at face value, the library
  designer gets the benefit of that invariant.

- if a library designer wants the optimization in the cases where
  it's possible, she either has to:

  - prepend empty_type to the list in order to ensure it, and give up
    on the nice invariant

  - implement a moderately-complex type sequence reordering algorithm,
    which surely costs far more in compilation resources than the
    simple search that would be implemented by the library to provide
    the optimization whenver possible.

IOW, we make the library designer choose between safety and efficiency
at compile-time just to get runtime efficiency.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

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