
Hi, I'm sorry if this is very late. This month has been a whirlwind for me. So many things happening. ***I vote to accept Proto.*** - What is your evaluation of the design? Proto is very well designed. I've seen it progress through the years. It's very mature and stable now. I've been using it as early as 2005 as a Spirit-2 core library. Spirit-2's design and evolution somehow influenced Proto's design. I'm very happy with Eric's design decisions. Some history... Eric and I had our share of squabbles in the past ;-) related to how I expected Proto to be. I knew from the start that I needed something like it. Joao Abecasis, a Spirit developer, started one like it, from my urging. Fusion was developed, in part, due to the need for manipulation of heterogeneous data structures, specifically for spirit: syntax trees. I recall that our biggest disagreement, and one that we resolved soon enough, was my need for flattened sequences. Eric insisted on presenting the results with no flattening, I wanted flattening. For example, I wanted: a >> b >> c >> d to be a flattened fusion sequence, not a tree. I was reluctant to have Spirit go through a 2-step process that necessitated a conversion from a tree to a fusion-sequence: proto-tree-->fusion-sequence I had code that didn't use Proto, that produced tight code and fast compile times. The challenge was for Eric to beat that or at least come close to its performance. I wanted to take advantage of fusion algorithms to *efficiently* iterate over the sequence. At first, this lead to the development of segmented fusion iterators. Eric actually implemented this: http://lafstern.org/matt/segmented.pdf into Fusion! It was OK and efficient at runtime. Unfortunately, compile time suffered considerably. Our endless discussions culminated with: http://article.gmane.org/gmane.comp.parsers.spirit.devel/2765 Seems some folks were tuning in to our discussions. The C++ version of "Scrap Your Boiler Plate", a very powerful, well studied and widely used design pattern for generic traversal from the Haskell world: http://portal.acm.org/citation.cfm?id=1159861.1159871 references Eric's post above. So far so good, yet, SYB ("Scrap Your Boiler Plate") was not available in a mature form in C++ yet. This then, again, lead to Dan Marsden's proposed traversal library. What Eric ended up doing was to provide a zero-overhead tree structure that's converted very efficiently to a flattened fusion sequence. It was as fast as my non-proto Spirit2 implementation and with some compile time performance hit. In due time, I'll be using Dan traversal library. At any rate, Eric's intuition to not flatten the trees is dead-on correct. It's the right approach. I'm glad that it influenced interesting solutions to interesting generic programming problems. I was happy :-) Proto proved it's worth. Oh, there were more disagreement on things big and small. Development happened in an evolutionary manner spanning years. If you guys are interested in what transpired, it's all archived in the Spirit-devel list. I gave him a very tough time :-) The space here won't do justice to what actually happened, nevertheless, I already did my review a long time ago, spaning years. In the end, Eric pulled it all through. I gave him a very tough time :-) - What is your evaluation of the implementation? A+ - What is your evaluation of the documentation? A+ - What is your evaluation of the potential usefulness of the library? Oh man! - Did you try to use the library? With what compiler? Did you have any problems? Yes. With all compilers required by Spirit. No problems. - How much effort did you put into your evaluation? A glance? A quick reading? In-depth study? Many years of study; from its inception. - Are you knowledgeable about the problem domain? Yes. very. Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net