Boost logo

Proto :

Subject: Re: [proto] _unpack transform
From: Eric Niebler (eric_at_[hidden])
Date: 2012-07-11 13:32:34


On 7/11/2012 9:55 AM, Eric Niebler wrote:
> I'm going to keep playing with this. Your suggested syntax is nice. I
> wonder how close I can get. (Although I kinda like my pseudo-pack
> expansions, too. :-)

<replying to myself, sorry>

But based on Thomas' suggestion, I'm considering this alternate syntax:

  f0(unpack(_)...)

One of the problems I see with Thomas' original syntactic suggestion was
that it gave you no control over /how/ the arguments get unpacked.
Better to have the unpack to appear in a *pattern* that gets repeated.
With the above syntax, I can do:

  f0(f1(f2(unpack(_))...))

and it's clear I want:

  f0(f1(f2(child0), f2(child1), f2(child2), /*...*/))

But keeping Thomas' unpack keyword has 2 nice benefits:

1) The wildcard keeps it's meaning. It always means "the current
expression". In my original proposal, a pseudo-pack expression changed
the meaning of the wildcard to mean, "the current child of the current
expression." That might be a bit confusing.

2) I could use a different transform as an argument to unpack. For instance:

  f0(f1(f2(unpack(_child0))...))

That would mean, unpack the children of the current expression's first
child.

But perhaps "unpack" is the wrong name now, since "unpack" and "..."
seem redundant. Maybe it should be "children_of":

  f0(f1(f2(children_of(_))...))

Blech, that sucks too. Maybe "pack":

  f0(f1(f2(pack(_))...))

That's no so bad, actually. Now, the question is whether I can retrofit
this into proto-current without impacting compile times.

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

Proto list run by eric at boostpro.com