
On 8/3/2011 6:53 AM, John Maddock wrote:
The review of the containers library by Ion Gaztanaga starts today, to summarize the library:
"Boost.Container library implements several well-known containers, including STL containers. The aim of the library is to offers advanced features not present in standard containers or to offer the latest standard draft features for compilers that comply with C++03.
In short, what does Boost.Container offer?
* Move semantics are implemented, including move emulation for pre-C++0x compilers. * New advanced features (e.g. placement insertion, recursive containers) are present. * Containers support stateful allocators and are compatible with Boost.Interprocess (they can be safely placed in shared memory). *
The library offers new useful containers: o flat_map, flat_set, flat_multiset and flat_multiset: drop-in replacements for standard associative containers but more memory friendly and with faster searches. o stable_vector: a std::list and std::vector hybrid with random-access iterators that offers iterator stability in insertions and erasures. o slist: the classic pre-standard singly linked list container."
Documentation from the library may be viewed online here: file:///M:/data/boost/sandbox/move/libs/container/doc/html/index.html
The source may be accessed from the "move" directory of the sandbox SVN or downloaded from http://www.drivehq.com/web/igaztanaga/boost_container.zip. Note that this download contains a copy of the accepted, but not yet release, Boost.Move library - extract the zip over a copy of Boost-1.47 to get a full working copy.
This is a very late review of the Containers library. My review is based on reading the documentation rather than trying the library. First off I vote that the library should be accepted into Boost.
Review comments might like to answer the following questions:
* What is your evaluation of the design?
The design is straightforward.
* What is your evaluation of the implementation?
Did not look at the implementation.
* What is your evaluation of the documentation?
I think the documentation is good, but it is hard to find overviews of the separate containers. They are buried in the reference whereas I would like to see them as separate topics in the TOC. For the example in the "Emplace: Placement insertion" topic there is a 'non_copy_movable ncm;' in the main function but it is never used, which is confusing. I did get the idea of emplacement from the example and understand what it is. There is mention in the Introduction that "Containers support stateful allocators" but that appears to be all that is written about that topic. I would like to know what that is about. The "Recursive Containers" topic gives a nice example but does not explain what a recursive container entails and why a recursive container is not guaranteed by the standard. Some further information should be given in this topic. For all of the containers which have the same names as the std:: containers, it should be pointed out what their benefits are. if it is a matter of all those containers having move semantics, placement insertion, recursive containers, and stateful allocators, that should be mentioned. One would like to know why one should use the Containers library containers rather than the std:: containers without having to read the description of each container.
* What is your evaluation of the potential usefulness of the library?
The new containers are definitely useful. The containers which have the same names as the std:: containers need to make a case for their usefulness better than they currently do in the doc.
* Did you try to use the library? With what compiler? Did you have any problems?
No, I did not try it. My trust in Ion Gaztanaga's programming from his other work in Boost is pretty high. I will try out various containers when I have the chance to experiment with them.
* How much effort did you put into your evaluation? A glance? A quick reading? In-depth study?
A moderate reading of the doc.
* Are you knowledgeable about the problem domain?
Yes. I have used and programmed some C++ like conatiners in various programming environments, even when I was not using C++, and consider the C++ standard library conatainers, iterators, algorithms superior to any other similar library in other languages I use ( Python, C++/CLI and C# .Net, Java ).
And finally, every review should answer this question:
* Do you think the library should be accepted as a Boost library? Be sure to say this explicitly so that your other comments don't obscure your overall opinion.
Answered already. The library should be accepted into Boost. The new containers are very useful. I apologize for the late review and the fact that I did not get a chance to really use the library, but I will do so when I am not as busy as I have been on other programming chores. Eddie Diener