Boost logo

Boost :

Subject: Re: [boost] Preliminary submission: generic linear algebra algorithms library Boost LA
From: Thomas Klimpel (Thomas.Klimpel_at_[hidden])
Date: 2009-10-22 18:15:56


Some final words for the start: I didn't really intended to review this library. I was just confused by the description about the scope of the library, so I followed the link and tried to conclude what the library intended to do. The matrix_inverse and matrix_determinant looked misplaced to me, so I skimmed over them and was left even more puzzled. At that point, I decided to write a potentially quite unfriendly mail explaining why I felt puzzled. The answer of Marcus Lindblom made me realize that the proposed library was actually quite polished, and probably took Emil quite some time. However, the question how to interpret "trivial" in the statement "Boost multi_array is relevant as it is trivial to define matrix_traits specialization that allows (Boost) LA to treat it as a matrix." was probably also quite unfriendly.

So I decided to review the library so that I can also comment on the positive things. I noticed that my review is not free from unfriendly remarks, but there are hopefully enough friendly words to compensate for these.

Emil Dotchevsk wrote:
> so I hope it is OK to skip the interest
> query and request a preliminary review for Boost LA.

So, let's try to review the library:

> Please always state in your review, whether you think the library should be
> accepted as a Boost library!

Good question. I have no real opinion on this question, so I will not participate in the real review. However, I don't like the name Boost.LA and I think that the description "Boost LA provides a set of generic linear algebra algorithms, ..." is not really helpful. And I really miss a clear statement with respect to the scope of the library.

> - What is your evaluation of the design?

I haven't really tried to evaluate the design. But everything I have seen looked OK, and some things where extremely nice done.

A possible improvement might be more explicit about the requirements of the value types of the matrices.

> - What is your evaluation of the implementation?

The implementation looks quite polished. I was impressed by the complete suite of unit-tests and the code generators. I've seen that there were even code generators for matrix_determinant and matrix_inverse. However, I think that these two code generators are false friends, because they implement an analytic formula that is neither efficient nor robust against rounding errors.

> - What is your evaluation of the documentation?

The generated documentation looks nice from an optical point of view, but this is probably the place that still needs improvement.

> - What is your evaluation of the potential usefulness of the library?

The library in its current form seems to be concerned with fixed size vectors and matrices. In a certain sense, I like libraries with a clear scope. Previous discussions indicated the need for such a library, so why not? The C++ language has limited built in support for fixed sized multi_arrays like double[2][3][4]. The library could be used to wrap types like double[2] and double[2][3], but not types like double[2][3][4]. But then we are back to the question of the scope of the library. The Boost.Array library is essentially a wrapper around T[N] and is considered useful. Now vec.hpp (la::vec<T, D>) provides a wrapper around T[D] and mat.hpp (la::mat<T, Rows, Cols>) provides a wrapper around T[Rows][Cols]. The traits system of the library probably even allows to adapt the raw T[Rows][Cols] type without using the la::mat<T, Rows, Cols> wrapper class. And the library provides quite some functionality in addition to simple wrapping, so I guess I have to conclude that the library is useful.

Providing wrappers for T[D1][D2][D3] and T[D1][D2][D3][D4] , ..., T[D1][D2][D3][D4][D5][D6][D7][D8][D9] might also be useful sometimes (and the code generators might help here...), but this is the question of the scope of the library again.

> - Did you try to use the library? With what compiler?
> Did you have any problems?

No, I didn't try to use the library.

> - How much effort did you put into your evaluation?
> A glance? A quick reading? In-depth study?

A glance.

> - Are you knowledgeable about the problem domain?

No, I don't even know what problem domain the library tries to address.

Regards,
Thomas


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk