Boost logo

Boost :

Subject: Re: [boost] Phoenix3 port to proto complete
From: Eric Niebler (eric_at_[hidden])
Date: 2010-07-23 11:32:47


(cross-posting to the proto list)

On 7/23/2010 10:25 AM, Thomas Heller wrote:
> 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.
<snip>

Let me expand a bit on Thomas' post with my own perspective. Currently,
the expressions created by Boost.Bind, Boost.Lambda and Boost.Phoenix2
are black boxes. You can pass them to std algorithms for evaluation, but
that's about it.

In contrast, the expressions created by Boost.Phoenix3 will the Proto
expressions. If Phoenix3 is the compiler of a C++-in-C++ domain specific
language, then the Proto expression is the intermediate form. It will be
documented and part of the Phoenix3 API. The grammar for valid Phoenix3
expressions will also be documented and extensible. For the first time,
we will have a way to generate C++-like expression trees, just like the
C++ compiler itself does. We have a standard way (Proto) to traverse and
manipulate them. Sure, you can just evaluate them as you could before,
but now you can do much more. For instance, you can define your own
Proto transforms to:

- Do various optimizations, just like a real compiler
- Add your own custom evaluation strategies for operations on your types
- Rewrite Phoenix3 expressions for parallel execution, or whatever
- ???!!!

Essentially, it means Phoenix3 is a white box, an open platform. Third
parties can use just the Phoenix3 front end and intermediate form,
substituting their own back ends to make the expressions mean and do
completely different and domain-specific things.

Expect to see Phoenix3 expressions showing up in other DSEL contexts.
It's hard to predict how people will use this. The possibilities are
really limitless.

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

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