Boost logo

Boost :

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
> improvements.
> 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:
> Incubator:
> Github:
> 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
> problems?

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!
> Ion

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