$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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.