
On Friday 23 July 2010 15:59:46 Robert Jones wrote:
On Fri, Jul 23, 2010 at 2:18 PM, Thomas Heller
<thom.heller@googlemail.com>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.