
Eric Niebler wrote:
For those interested, I've zipped up the Phoenix3 alpha and put it here:
http://boost-sandbox.sf.net/libs/phoenix/phoenix3alpha.tar.gz
It builds against trunk. It should also build against the current release branch (pre-1.37), but I haven't tested that.
I'd like to stress that this implementation of Phoenix is NOT the subject of this review. I'm not putting it in the file vault so as to avoid confusion. I'm only providing it for people who would like to play with a version of Phoenix built on top of Proto, ResultOf and TypeOf.
Thanks Eric!
It also should have a clearer implementation, even if it may not be as efficient.
clearer implementation? What makes you think so? Because of proto? I don't agree. You can write very clear code with or without proto.
Joel has a good point. The v2 implementation of Phoenix is very clean and modular. In fact, the modular design of Phoenix was challenging for Proto, and I'm not yet satisfied with the results. Typically, a DSEL conforms to a grammar that can be stated simply in one place. Phoenix's modularity means that you can include and use only a subset of the library -- a subset that conforms to a simpler grammar. That means that the Phoenix grammar and expression evaluator needs to be distributed, loosely coupled and pluggable. Proto can do this, but it's not pretty.
Perhaps there are ways I can extend Proto to better support modular grammars.
I'm sure you'll come up with something very elegant. The result of which will have tremendous impact on Spirit2 and Phoenix3. And I can't thank you enough for your amazing work on this. Regards, -- Joel de Guzman http://www.boostpro.com http://spirit.sf.net