Boost logo

Boost :

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


Mat Marcus <mat-boost_at_[hidden]> writes:

>> Also, although Metafunction is more fundamental, it requires more
>> infrastructure (lambda) to do higher-order functional programming
>> with it. A metafunction class can be passed to a metafunction
>> directly. I believe there *may* be good efficiency reason to
>> preserve its current definition.
>
> Sure, I'm familiar with the use of metafunction classes. Let me just
> make sure that I understand the tradeoff you are describing here. I
> might like to relax the requirements on models of metafunction class
> in order to admit a wider set of representatives. But there is no
> known way to avoid the compile time inefficiencies incurred by the
> external apply over the nested apply. Is that the point?

Yup. If you want the ultimate low-overhead higher-order metafunction
argument, you want a metafunction class. Adding a level of
indirection through an external apply does incur inefficiency.

> In the runtime world we have inlining and as a result I'm used to
> waving my hands and saying that the generic style doesn't incur
> extra overhead on a "reasonable compiler". I suppose there's not
> really an analog in the compile time world.

Nope, not until we have a meta-compilation phase. The fact that you
only pay once for instantiation is close.

> If the only requirement on metafunction classes was the invokability
> of the free apply, MPL could perhaps look first to see if a nested
> version existed, but even the looking takes time.

Yup.

-- 
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