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: http://blincubator.com/bi_library/polycollection/?gform_post_id=1643
Github: https://github.com/joaquintides/poly_collection
and the documentation here:
http://rawgit.com/joaquintides/poly_collection/website/doc/html/index.html
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: http://www.boost.org/community/reviews.html
Waiting your reviews!
Ion