Overview

This is the Wiki page for coordinating development efforts for Phoenix V3, a ground-up rewrite of Phoenix build on top of Boost.Proto. Please share your ideas and post sample code here. Once we find our shared vision, we can begin fleshing out the implementation in the phoenix_v3 branch in Boost's subversion repository.

Background

In the proto/v4 branch in subversion there is a nearly complete implementation of Phoenix on top of Proto. It is overcomplicated and compiles slowly, but proves the viability of the project. The purpose of the reboot is to avoid the problems that led to the complexity and slow compile times. That may involve some changes to the fundamental libraries upon which Phoenix3 will be based. That includes Proto, MPL and Fusion.

Outstanding Issues

  • Arity and Config Macros: Phoenix function arity defaults to 10. Proto arity defaults to 5. Monkeying with config macros in Phoenix will introduce include order headaches, not to mention longer compile times for any other library based on Proto.
  • Terminal Capture Behavior: In Phoenix, most terminals must be captured by value. In Proto, all terminals are captured by reference by default and must be recaptured by value through the use of a so-called Proto generator. This requires extra code (complexity) and needless template instantiations (longer compile times). Perhaps Proto can be extended such that terminal capture behavior can be specified on a per-domain basis.

Discussion

There is a thread on the boost-devel mailing list about Boost.Phoenix v3 that can be found  here.

Steven Watanabe's template profiler is checked into the Boost sandbox and can be checked out  here. It is also in the Boost Vault and can be downloaded from  here.

Attachments

  • miniphoenix.cpp Download (14.5 KB) - added by eric_niebler 8 years ago. A working mini-phoenix-on-proto implementation that demonstrates an extensible core and if_/else_ statement implemented as an extension
  • miniphoenix-template-profile.zip Download (31.7 KB) - added by eric_niebler 8 years ago. Template instantiation profile of miniphoenix.cpp
  • miniphoenix2.cpp Download (7.8 KB) - added by eric_niebler 7 years ago. A cleaner, simpler design for the mini-phoenix example