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.

See
<http://boost-sandbox.sourceforge.net/libs/proto/doc/html/boost/proto/arg_id510309.html>

> 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.

See:
<http://boost-sandbox.sourceforge.net/libs/proto/doc/html/boost_proto/users_guide/examples/map_assign.html>

> 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:
<http://boost-sandbox.sourceforge.net/libs/proto/doc/html/boost_proto/users_guide/expression_transformation/is_callable.html>

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:
<http://boost-sandbox.sourceforge.net/libs/proto/doc/html/boost/proto/op/posit.html>

> 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
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk