Boost logo

Boost :

From: vicente.botet (vicente.botet_at_[hidden])
Date: 2008-04-06 13:14:19

Hi again,

In the Quick start, I found this use of macros very odd

    const filtered = BOOST_EGG_PIPABLE_L BOOST_EGG_POLY()

    egg::result_of_indirect<T_make_filtered const *>::type
    const her_filtered = BOOST_EGG_PIPABLE_L

Could you show what a user that do not use the macros needs to write. This
will surely help to understand why these macros a necessary.

It would be very nice if the docummentation contains links for the macros
the same way you have done for the specific notation.

By the way I fond this link to specific notation very useful. Thanks for the

I have no doubt that the use of bind expressions may be less readable than:
void quick_start_nest()
    int i6 = 6, i7 = 7;
    std::plus<int> plus;
    std::minus<int> minus;

    int r =
    // Lv: 0 1 2
        // \x -> (\(y,z) -> plus(5, y(z, x)))
        egg::nest2(plus)(5, egg::nest2(_1_(_1))(_1_(_2), _0_(_1)))
            (i6)(minus, i7);

    std::cout << r;
 Prints 6.

But, do you really think that some one is able to read this without taking 5
minutes :-(. I think that you should start with more simple examples,
showing only a new feature and comparing with code without Egg.

I like a lot your fuse/unfuse technique for emulating variadic functions.
Only this is enough to see in the implementation.

On the section The Return of the Monomorphic It would be greate to see the
compiler messages with and without Egg.

Vicente Juan Botet Escriba

----- Original Message -----
From: "vicente.botet" <vicente.botet_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Sunday, April 06, 2008 6:05 PM
Subject: Re: [boost] Egg 2nd request for reviews: Some comments

> Hello,
> As you can see this is not a review. I have no doubt that Egg is an
> excelent
> candidate for a Boost library and that there are a lot of hidden diamons.
> I have only started to read the docummentation (the introduction adn the
> quick start) and for the moment I'm not sure that I will find the time to
> see the impementaion. The subject is really abstract and it is hard to
> read
> without stoping every two lines to se if I have realy understood. I supose
> that there are other boosters in the same situation.
> I have a little problem that could be a major one. In the documentation it
> is cleary state:
> "Also, assume that every expression is placed after:
> namespace egg = boost::egg;
> using namespace egg;"
> Does it means that every not prefixed symbol comes from egg? I think that
> it
> will be better to prefix every specific egg class by egg::. There are some
> moments that I dont't know if the used class is a egg class or a boost
> class. This is surely due to the fact that Egg use class or functions
> names
> already in use on Boost or the STL.
> This has nothing to be with the contents. I recognize that this is not
> natural (I'm writing now a library and I use the same style) for the
> writer
> to prefix every new symbol, but I'm sure the reader will apreciate. We
> shouldn't mix documentation and coding styles.
> I dont find too much clear the naming of Major and Little.
> "Function Adaptors which take Polymorphic Function Objects then return
> adapted ones."
> Could you ad to what these are adapted?
> "Function Objects which are ports of famous function templates."
> Could you explain why this is useful?
> I really think that the introduction do not show clearly what is the
> problem
> Egg try to solve.
> " Unfortunately, if you need a Polymorphic Function Object whose return
> type
> depends on its argument types, it is not easy. "
> I think that you should present here what can or can not be done without
> Egg, and show how Egg helps to do that.
> The section "Problems of function templates" for the "Quick Start" shoud
> appear in the introduction to my taste.
> May be you can add a 6th problem: a template cannot be passed to
> boost::lambda::bind as it seam from the introductuion this is a majot goal
> of the Egg library. maybe it would be a good idea to show hwhat the user
> needs to do today to pass a template to the boost::lambda::bind function
> and
> how Egg make it easier.
> One minor remark on the documentation. There is an incoherence on the two
> first pages:
> Portability
> Egg is known to work on the following platforms:
> a.. Microsoft Visual C++ .NET Version 7.1 SP1
> b.. Microsoft Visual C++ 2005 Express Edition SP1
> c.. Microsoft Visual C++ 2008 Express Edition
> d.. MinGW with GCC 3.4.4
> e.. MinGW with GCC 4.1.2
> Portability
> Egg is known to work on the following platforms:
> a.. Microsoft Visual C++ Version 7.1 or later
> b.. GCC 3.4.4 or later
> The Rationale in the Introduction seam to not add nothing interesting. Are
> there some missing links?
> I expect to have enough time to do a review, even a little one.
> Best
> _____________________
> Vicente Juan Botet Escriba
> ----- Original Message -----
> From: "dan marsden" <danmarsden_at_[hidden]>
> To: "Boost" <boost_at_[hidden]>; "Boost Announce"
> <boost-announce_at_[hidden]>; "Boost Users"
> <boost-users_at_[hidden]>
> Sent: Sunday, April 06, 2008 1:59 PM
> Subject: [boost] Egg 2nd request for reviews
>> Hi All
>> The review of the Egg library by Shunsuke Sogame has been running for 1
>> week now. There has been some discussion of the library on a couple of
>> related threads, but no reviews submitted so far. Please try and find
>> time
>> to submit a review of this library if possible.
>> If you wish to review, but don't have time before the review ends on
>> April
>> 13th, please post to that effect, we may be able to extend / move the
>> review period to help reviewers.
>> Introduction:
>> It is not so easy to define Function Objects
>> especially if you want to support Boost.ResultOf and Boost.Lambda.
>> Therefore, as Boost provides iterator_facade and iterator adaptors,
>> Egg provides function_facade and function adaptors.
>> Egg provides the following features:
>> * Workaround for the Forwarding Problem
>> * Helpers to build Function Objects:
>> * egg::function and egg::function_facade provides the way to
>> build Function Objects which supports Boost.ResultOf and Lambda.
>> * Function Objects Adaptors(in other words, higher-order functions):
>> * egg::curryN supports the currying.
>> * egg::pipable emulates extension methods(C#).
>> * egg::fuse/unfuse emulates variadic functions.
>> * egg::nestN represents nested lambda expressions.
>> * etc...
>> The documentation is on line:
>> The zipped source code is in Vault/FunctionObjects:
>> Tested under:
>> Boost Development Trunk and Boost Version1.34.1.
>> ---------------------------------------------------
>> Please always state in your review, whether you think the library should
>> be
>> accepted as a Boost library!
>> Additionally please consider giving feedback on the following general
>> topics:
>> - What is your evaluation of the design?
>> - What is your evaluation of the implementation?
>> - What is your evaluation of the documentation?
>> - What is your evaluation of the potential usefulness of the library?
>> - Did you try to use the library? With what compiler? Did you have any
>> problems?
>> - How much effort did you put into your evaluation? A glance? A quick
>> reading? In-depth study?
>> - Are you knowledgeable about the problem domain?
>> Thanks
>> Dan Marsden
>> Review Manager
>> ___________________________________________________________
>> Yahoo! For Good helps you make a difference
>> _______________________________________________
>> Unsubscribe & other changes:
> _______________________________________________
> Unsubscribe & other changes:

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