Boost logo

Boost :

Subject: Re: [boost] Phoenix3 port to proto complete
From: Thomas Heller (thom.heller_at_[hidden])
Date: 2010-07-23 10:25:18


On Friday 23 July 2010 15:59:46 Robert Jones wrote:
> On Fri, Jul 23, 2010 at 2:18 PM, Thomas Heller
>
> <thom.heller_at_[hidden]>wrote:
> > Ladies and Gentlemen,
> > I proudly announce that the port of phoenix3 is completed! All
> > testcases pass! (some with minor modifications)
>
> Great news!
>
> Speaking as someone who's become a little lost in the maze of
> phoenix/lambda/proto/bind etc., I'm aware that this port is important
> for the general roadmap in this area, but am unsure exactly what this
> port buys us.
>
> Could you write a few paragraphs on what issues this solves, and what
> new capabilities are supported by this port.
>
> Many Thanks

Sure I'll try my best.
The main motivation behind the port was from the review for phoenix2.
One of the results was conditional acceptance if phoenix3 is implementend with
proto as its underlying expression template engine, the other was to improve
compatibility with bind, and lambda.

Let me try to give an overview of the different components you addressed:

Boost.Proto - The working horse behind phoenix3:
It serves as the expression template engine and provides utilities to work
with it. In general proto can be seen as a Domain Specific Embedded Language
(DSEL) compiler construction kit for C++ (based on expression templates. There
are already some in boost: spirit and xpressive based on proto.
Phoenix is nothing more than DSEL. Well, it is a little special, as it aims to
be C++ in C++.
With Boost.Proto we have the unique possibilty to (more or less) easily
introspect our pheonix expression and do lots of cool stuff with it.

Boost.Bind - The competitor of phoenix::bind:
Boost.Bind exists for a long time now. phoenix::bind shall be completely
compatible to Boost.Bind (API wise).
However it shall not replace Boost.Bind, because Boost.Bind has some
advantages over phoenix::bind (compile time, legacy compiler support).

Boost.Lambda - The predecessor of Boost.Phoenix:
Boost.Lambda is the one library which inspired to Joel de Guzman to build
Phoenix in the first place. It shares many similarities, but phoenix is built
upon more modern concepts.
IIUC, the plan was to deprecate Boost.Lambda at some point in favor of
phoenix.
Some needs to clarify this a bit more.

C++0x lambdas - The competitor of Boost.Phoenix:
As you heard, C++0x will have its own lambdas. Phoenix will be completely
interoperable with C++0x.
There will be a section in the new phoenix documentation covering
advantages/disadvantages and stuff. I hope you can wait until then.

You are welcome.


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