# Boost-Build :

From: David Abrahams (dave_at_[hidden])
Date: 2002-11-18 19:06:49

Christopher Seiwald <seiwald_at_[hidden]> writes:

> | >>When Perforce introduced rule indirection, they did it a bit
> | >>differently than we did:
> | >>
> | >> x = a b ;
> | >> y = [ \$(x) c d ] ;
> | >>
> | >>In Boost.Jam, this is equivalent to:
> | >>
> | >> y = [ a b c d ] ;
> | >
> | > Logical.
> | >
> | >>In Perforce Jam, this is equivalent to:
> | >>
> | >> a c d ;
> | >> y = [ b c d ] ;
> | >
> | > Yikes, how unintuitive.
> |
> | Heh, it's perfectly intuitive to Christopher Seiwald ;-)
>
> Well, I'll freely admit my intuition has led me down ratholes in my
> life, and I wouldn't claim that my logic is impeccable, but I'd like
> to offer what basis there is for this ascetic behavior:
>
> 0. To be fair, jam's answer is actually:
>
> y = [ a c d ] [ b c d ] ;

Yeah, sorry. I forgot.

> 1. It's no more or less intuitive than, and consistent with:
>
> x = a b ;
> y = 1 2 ;
> \$(x)\$(y) -> a1 a2 b1 b2 ;

How is it consistent? I would have expected:

[ a c ] [ a d ] [ b c ] [ b d ]

if it were truly going to be consistent.

> 2. It's easy to get linear (as opposed to productizing) expansion
> from Perforce's jam:
>
> y = [ \$(x[1]) \$(x[2-]) c d ] ;
>
> It isn't as easy to get productizing expansion from boost jam.

True. But who really wants productizing expansion?

productizing-only-counts-if-you-can-sell-it-ly y'rs,
dave

```--
David Abrahams
dave_at_[hidden] * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution

```