Phil Endecott
Dear All,
I have just a couple of notes about Hana; this does not constitute a review:
Firstly, as I understand it Hana believes that it can replace much or all of what Fusion and MPL provide with a superior alternative. If that is the case, I suggest that the docs should not start out by describing Hana with reference to those libraries. At present, it would seem that in order to understand what Hana can do for me, I need to first learn at least a little about those other libraries - and then the Hana docs tell me how it compares to them. This might not be a bad thing in the context of docs for this review, but for "end user" documentation it should stand alone.
I agree that the documentation _could_ be more self-contained. However, I am not sure it _should_ be. Indeed, I am OK with offloading some of the explanation about "what is template metaprogramming" to other resources, since the tutorial would otherwise double in size. When looking at Fusion's documentation, for example, they cite MPL to introduce their own work. And for the MPL, they wrote a book to explain "what is C++ template metaprogramming". So, while you are definitely correct that Hana's tutorial is not self- contained, I will not take direct actions to change this unless at least a couple of persons express this desire, since that's a lot of work (and not especially pleasant work either).
Secondly, we're moving towards a future where a lot of what previously required TMP can now be done using "regular" C++ code qualified with constexpr. I've just replaced a fair chunk of my crufty old TMP code with constexpr and it is like a breath of fresh air. Against that background, it might be worthwhile to structure your examples by showing what Hana (and TMP in general, perhaps) can do that constexpr cannot do, i.e. start with an example using constexpr and extend it to add features not possible with constexpr.
I guess it really depends on what kind of TMP code that was. Type-level computations and heterogeneous computations (like Fusion) are not impacted by constexpr. This distinction is partly what I wanted to make in the introduction (the quadrants of computation), but it seems like I could show clearer examples of where homogeneous constexpr computations differ from heterogeneous computations. Is this distinction (between homogeneous-constexpr computations and heterogeneous computations) what you would like to see exposed more clearly? Thanks for your comments, Louis