Boost logo

Boost :

Subject: Re: [boost] Template metaprogramming libraries
From: Gordon Woodhull (gordon_at_[hidden])
Date: 2011-09-09 17:12:18


Hi Abel,

I've taken a quick glance through your docs.

It's neat that you support a sort of imperative (or as you say, procedural) interface within your monad EDSL, using set<>. I imagine that will make some metaprograms easier to understand.

I also think let<> will help readability. Currently I rely on typedefs within the class body and that is not so pretty or consistent.

I guess the difference between your lambda<> and mpl::lambda is that yours works more like in FP languages whereas MPL's transforms placeholder expressions into metafunctions.

Is there a summary somewhere of the difference between your approach and MPL's?

> My parsing library is based on parser combinators and monads.

Oh, interesting - looks like it is of equivalent power but a higher-level interface, more similar to regular expressions. I like that better and hope to build in that direction.

> I need to understand how your code works to see the differences and similarities.
> Do you have documentation/examples somewhere?

I haven't yet documented Angly. There is my blog metagraph.info and the best example is
metagraph/libs/metagraph/example/angly_graph_parser.cpp

From that, a simple example of the sorts of expressions I'm trying to parse:

typedef graph<node<A, edge<t, B>, edge<u, C> >,
              node<B, edge<v, D> >,
              node<C, edge<w, E> >,
              node<D, edge<x, F> >,
              node<E, edge<y, F>, edge<z, G> > > adjacencies;
 
I.e. declarative EDSLs within the "angly" template expression syntax.

I also considered imperative EDSLs but that's not at all where I'm going with this: I'm just trying to get a nice language for declaring metadata.

Cheers,
Gordon


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