Subject: Re: [proto] Phoenix3 port to proto complete
From: Thomas Heller (thom.heller_at_[hidden])
Date: 2010-07-23 11:48:57
Eric Niebler wrote:
> (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
>>>> 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.
> 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
> - ???!!!
Let me add some more things I have in mind:
- JIT compiler
I want to get started with the latter soon, so people can actually debug
their stuff (it is a pain to do it with for example gdb).
> 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.
Proto list run by eric at boostpro.com