Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2008-03-02 12:30:09

dan marsden wrote:
> Review of Proto
> Evaluation of the design Excellent. The close collaboration with the
> Spirit development, and the fact Proto has underpinned xpressive for
> some time clearly shows in a mature looking library. The library
> uses MPL, Fusion, the result of protocol and other standard
> components effectively, making good use of other parts of Boost.
> One very small implementation question - arg_c doesn't have a
> corresponding arg, in line with the pattern see in MPL/Fusion for
> at/at_c etc. Was there a reason for this, if not I'd suggest always
> having xxx when there is a corresponding xxx_c feature.

It's there. I just don't talk about it much in the user docs because I
don't find it useful.


> Evaluation of the documentation Proto's problem domain is naturally
> quite abstract, and more heavily technical than other Boost
> libraries. The documentation is of good quality, but I feel there may
> still be quite a steep learning curve for new users. The examples
> used are generally quite realistic, but this can mean they're tough
> to get started with in some cases. Some more trivial examples may
> help in places. Having said that, I learnt to use Proto from the
> documentation, so they're certainly sufficient to get going.

I'm open to suggestions for making this easier. I start the examples
section with Hello World, and then have 3 calculator examples of
increasing complexity before getting into the "real world" use cases. I
had hoped this would be enough to get people over the hump.

FWIW, I just added an additional example. It shows how one might
implement map_list_assign() from Boost.Assign using Proto. I think it
helps to show that Proto solves problems that people aren't accustomed
to thinking of as DSELs.


> I found a few specific issues in the docs:
> * The Transform concept documentation mentions ObjectTransform, but I
> cannot find any details of that transform in the concepts section

Yes, I haven't finished documenting Proto's concepts. I'll fix it.

> * The call<> documentation has a "TODO LINK" left in it. This also
> brings up a general point, I'd like to see links in code samples etc
> to the related documentation if possible, it saves backing up and
> down all the time trying to follow examples.

I'll fix the TODO. It's supposed to link here:

Active links from the code samples would be nice, but I'm not sure if
our toolchain supports that. I can check.

> * The documentation for call<> mentions posit<_>. I could not find
> posit mentioned in the top level documentation - is this a Proto
> feature, or just part of the example? Again this brings up a general
> point, it might be good to use namespace qualification to highlight
> the distinction between library and user code.

Fair point. Posit is part of proto, and is documented here:

> Usefulness Massive, there are plenty of DSEL's already in Boost, and
> plenty of others we probably should have.
> Effort put into review I implemented the (partially complete) port of
> Phoenix to Proto, using a slightly early version of the library.
> I've put a few hours study into the latest Proto documentation as
> I've not been using the library actively recently. Compilers used -
> gcc 3/4, msvc 7.1/8
> Am I knowledgeable in the problem domain? Yes - I've implemented
> DSELs both with and without Proto, and appreciate the benefits of
> having the expression template engine in the form of a library.
> Should Proto be accepted into Boost? Yes

Thanks, Dan.

Eric Niebler
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at