[review] Fusion Library Accepted

Dear All, I am pleased to announce that the Fusion compile-time/run-time hybrid heterogeneous container and algorithm library by Joel de Guzman and Dan Marsden has been accepted into Boost. The library received 7 YES votes and 0 NO votes, with one abstention. Detailed Review Comments ------------------------ The following comments refer to issues that the library authors should address prior to merging the library into CVS: * Documentation: Many of the reviewers stated that they would like to see more tutorial documentation that demonstrates not only what the particular constructs in Fusion do, but also how they are expected to be used. A reasonably concise motivating example has been requested. It has already been pointed out that Fusion is used for some other boost libraries. A well-developed and self-contained case study of when and how to use Fusion would be greatly appreciated. The relationship between this library and the current Boost.Tuple library, as well as Boost.Mpl, should be discussed. The reference documentation is quite thorough and detailed comments regarding them have already been addressed by the authors. However the notion of "views" requires greater documentation. The examples in the algorithm sections currently do little more than demonstrate the syntax by which they can be called. Examples that more specifically express intent would be a notable improvement. (see for example Matt Austern's "Generic Programming and the STL"). In general the documentation would benefit from copy-editing. * Several commented on the use of the name "pair" for the fusion type that has typedefs for two types but only contains the second type. Although the typedefs and member names are consistent with the std::pair object, the name "pair" is confusing. The compile-time/run-time hybrid nature of this library makes it difficult to find perfect metaphors for constructs in the library. In this case, it seems better to find a term for this template (and the concept that it models) that more directly states its purpose. The name "tag_of" would also benefit from renaming. * The behavior of Fusion functions in the face of argument-dependent lookup (ADL) is not well specified. This should be made explicit in the reference documentation. The following comments refer to issues that, while not mandatory, deserve consideration: * The library name "Fusion", though not arbitrary, says little about the library's purpose. There is precedent for this within boost, however. A name change is not mandatory for the library's acceptance, but it would be worth while for the authors to consider a more telling name. * The mechanism for extending Fusion with new containers and iterators is complex and involves implementing a number of components, especially regarding iterators. An adaptation layer that is analogous to the Boost.Iterator library would be a fine addition to Fusion. * It would be beneficial to supply Boost.Serialization support for the Fusion container types. I am sure, as mentioned, that the authors of this library would accept a volunteer to implement this functionality. I would like to thank all the people who reviewed the library, voted, and otherwise participated in the discussion. Congratulations to Joel and Dan and I look forward to seeing Fusion in the Boost CVS soon. Ron Garcia

Ronald Garcia wrote:
Dear All,
I am pleased to announce that the Fusion compile-time/run-time hybrid heterogeneous container and algorithm library by Joel de Guzman and Dan Marsden has been accepted into Boost.
The library received 7 YES votes and 0 NO votes, with one abstention.
Good news! Thanks everyone. <snip mandatory changes> Thanks for the summary of the necessary changes. We'll aim to address those shortly.
The following comments refer to issues that, while not mandatory, deserve consideration:
* The library name "Fusion", though not arbitrary, says little about the library's purpose. There is precedent for this within boost, however. A name change is not mandatory for the library's acceptance, but it would be worth while for the authors to consider a more telling name.
I actually like the current name, as I also like the names Boost.Spirit and Boost.Xpressive as examples of other boost libs. In the absence of a natural name for the library such as the Boost Concept Library or the Boost Graph Library, I'd rather stick with the current name than change to some awkward acronym. Of course if somebody has a good idea for natural sounding name, that would be cool, and may help new users identify the library as being suitable/unsuitable for their needs.
* The mechanism for extending Fusion with new containers and iterators is complex and involves implementing a number of components, especially regarding iterators. An adaptation layer that is analogous to the Boost.Iterator library would be a fine addition to Fusion.
We've giving a fair bit of thought to the extension mechanism, hopefully we'll come up with something to ease the extension process for the final implementation.
I would like to thank all the people who reviewed the library, voted, and otherwise participated in the discussion. Congratulations to Joel and Dan and I look forward to seeing Fusion in the Boost CVS soon.
Ron Garcia
Thanks to everyone that provided feedback or a review. Also a big thanks to our review manager Ron Garcia for all his work towards the Fusion review. Cheers Dan

dan marsden <danmarsden@yahoo.co.uk> writes:
Of course if somebody has a good idea for natural sounding name, that would be cool, and may help new users identify the library as being suitable/unsuitable for their needs.
tuples (it's supposed to replace boost.tuple eventually, right?) metatuple (if you need something sexy) -- Dave Abrahams Boost Consulting www.boost-consulting.com

What about Boost.Practical (P)owerful (R)un (A)nd (C)ompile (T)ime (I)dioms & (C)ontainers (A)dvanced (L)ibrary :) Best Regards Matias

On Jun 5, 2006, at 9:09 PM, David Abrahams wrote:
dan marsden <danmarsden@yahoo.co.uk> writes:
Of course if somebody has a good idea for natural sounding name, that would be cool, and may help new users identify the library as being suitable/unsuitable for their needs.
tuples (it's supposed to replace boost.tuple eventually, right?)
Hmm... That is really what fusion to a large extent is. (Old) tuples are mainly a tuple data structure, Fusion is a tuple data-structure (possibly many of them), the definition of the interfaces of any tuple-like data-structure, and routines that use this interface for manipulating tuples (or tuple-like data-structures) And yes, fusion should replace boost.tuple. If Boost.Tuple is the baseline of tuples, Fusion could be viewed as "tuples on steroids" If Fusion is the baseline of tuples, Boost.Tuple could be viewed as "poor man's tuples" So tuple could be a descriptive name --- using it requires that the "switchover" gets done of course. Cheers, Jaakko
metatuple (if you need something sexy)
-- Dave Abrahams Boost Consulting www.boost-consulting.com
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/ listinfo.cgi/boost

Jaakko Järvi wrote:
On Jun 5, 2006, at 9:09 PM, David Abrahams wrote:
dan marsden <danmarsden@yahoo.co.uk> writes:
Of course if somebody has a good idea for natural sounding name, that would be cool, and may help new users identify the library as being suitable/unsuitable for their needs. tuples (it's supposed to replace boost.tuple eventually, right?)
Hmm... That is really what fusion to a large extent is. (Old) tuples are mainly a tuple data structure, Fusion is a tuple data-structure (possibly many of them), the definition of the interfaces of any tuple-like data-structure, and routines that use this interface for manipulating tuples (or tuple-like data-structures)
And yes, fusion should replace boost.tuple.
If Boost.Tuple is the baseline of tuples, Fusion could be viewed as "tuples on steroids" If Fusion is the baseline of tuples, Boost.Tuple could be viewed as "poor man's tuples"
So tuple could be a descriptive name --- using it requires that the "switchover" gets done of course.
Fusion can't replace Boost.Tuples while Boost still supports legacy compilers such as Borland and VC6/7. There was once a Fusion port to VC6/7 (but not Borland) by Peder Holt (Fusion-1), but Fusion-2 is almost a total rewrite, I sense that I'll find it impossible to ask him to invest the time for another port. I'm not sure until when Boost will continue to support these vintage compilers. Until we decide to move on and leave those compilers behind, I suggest: 1) We continue to have Boost.Tuples as-is 2) Make Boost.Tuple a conforming Fusion sequence Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net

Joel de Guzman <joel@boost-consulting.com> writes:
Jaakko Järvi wrote:
On Jun 5, 2006, at 9:09 PM, David Abrahams wrote:
So tuple could be a descriptive name --- using it requires that the
"switchover" gets done of course.
Fusion can't replace Boost.Tuples while Boost still supports legacy
compilers such as Borland and VC6/7.
Not true. You only need to support the old functionality of Boost.Tuples on those compilers, and.... surprise, we already know how to do that, and we have the code in CVS! -- Dave Abrahams Boost Consulting www.boost-consulting.com

dan marsden wrote:
Thanks to everyone that provided feedback or a review. Also a big thanks to our review manager Ron Garcia for all his work towards the Fusion review.
I echo Dan. Thanks to everyone! Thanks too Ron! I'll have a beer or two and celebrate in this corner where I am in :) Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net

dan marsden wrote:
Ronald Garcia wrote:
* The library name "Fusion", though not arbitrary, says little about the library's purpose. There is precedent for this within boost, however. A name change is not mandatory for the library's acceptance, but it would be worth while for the authors to consider a more telling name.
I actually like the current name, as I also like the names Boost.Spirit and Boost.Xpressive as examples of other boost libs. In the absence of a natural name for the library such as the Boost Concept Library or the Boost Graph Library, I'd rather stick with the current name than change to some awkward acronym.
Of course if somebody has a good idea for natural sounding name, that would be cool, and may help new users identify the library as being suitable/unsuitable for their needs.
Fusion was originally intended to be a code name. Now, I find it very natural to refer to the library using that name. If anyone comes up with a good acronym, I'm still inclined to use Fusion and add the Acronym with it. Example: Boost.Fusion.TAL Tuples and Algorithms Library Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net
participants (6)
-
dan marsden
-
David Abrahams
-
Jaakko Järvi
-
Joel de Guzman
-
Matias Capeletto
-
Ronald Garcia