Subject: Re: [boost] [review] Review of PolyCollection starts today (May 3rd)
From: Edward Diener (eldiener_at_[hidden])
Date: 2017-05-14 20:33:36
On 5/2/2017 7:46 PM, Ion GaztaÃ±aga via Boost wrote:
> Hi everyone,
> The formal review of JoaquÃn M. LÃ³pez MuÃ±oz's PolyCollection library
> starts today.
> I'd like to encourage your participation as the proposed library is
> small and focused, and reviewers don't need to be domain experts to
> appreciate the potential usefulness of the library and propose
> PolyCollection implements fast containers of polymorphic objects.
> Typically, polymorphic objects cannot be stored directly in regular
> containers and need be accessed through an indirection pointer, which
> introduces performance problems related to CPU caching and branch
> prediction. Boost.PolyCollection implements a novel data structure that
> is able to contiguously store polymorphic objects without such
> indirection, thus providing a value-semantics user interface and better
> performance. Three polymorphic collections are provided:
> * boost::base_collection
> * boost::function_collection
> * boost::any_collection
> dealing respectively with classic base/derived or OOP polymorphism,
> function wrapping in the spirit of std::function and so-called duck
> typing as implemented by Boost.TypeErasure.
> The library can be found here:
> and the documentation here:
> Please post your comments and review to the boost mailing list
> (preferably), the Boost Library Incubator. or privately to the Review
> Manager (to me ;-). Here are some questions you might want to answer in
> your review:
This is my review of PolyCollection,
> - What is your evaluation of the design?
I have no problem with the design as it succinctly covers the three
areas to which poly collections apply. These areas should be enough for
using any types with polycollections.
> - What is your evaluation of the implementation?
I did not look at it.
> - What is your evaluation of the documentation?
I have mentioned previously that I think the documentation should be
more specific about the types being used for the
boost::function_collection. While an example is good, as in the case of
the tutorial, and while a reference is good, as in the case of the
documentation for the insert member function, I found the former to be
too singular and special an example while I found the latter to be
highly technical and therefore hard to understand in general terms. A
better addition is simply to document in an explanation of ideas and
concepts exactly what types the boost::function_collection entails. I
assume it is any type which can be passed to std::function, but I do not
know if it can be a std::function object itself. Saying it is "Function
wrapping in the spirit of std::function" does not explain it adequately
to me. Also since std::function ( or boost::function if you will )
represents any callable it would be nice to understand why the
programmer would want to use boost::function_collection versus a
collection of std::function objects.
> - What is your evaluation of the potential usefulness of the library?
I see the library as being useful as an optimization over present
techniques in both speed and size terms. In effect it offers a choice
for end-users over normal C++ collections.
> - Did you try to use the library? With what compiler? Did you have any
I tried it with gcc-7.1 in c++11 mode and it worked well.
> - How much effort did you put into your evaluation? A glance? A quick
> reading? In-depth study?
Mostly a slow reading and an attempt to understand why the library
should be used and how to use it.
> - Are you knowledgeable about the problem domain?
Somewhat knowledgeable, but not an expert in the type of optimizations
which polycollection use.
> And most importantly:
> - Do you think the library should be accepted as a Boost library?
I think the library should be accepted based on the fact that it offers
an alternative to normal collections which can prove valuable to
end-users, and that it is a polished library with few surprises. With
that said I think the library should document better the advantages and
practical situations that make polycollection superior to normal C++
collections, else an end-user will be puzzled about for what situations
it will be useful.
> For more information about Boost Formal Review Process, see:
> Waiting your reviews!
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk