[eigen] Plans for a Eigen 2

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]

Hi List,

This is something that's been brewing in my head for a bit of time and that's 
been first discussed yesterday on #koffice:

*** Where we are : Eigen 1 **************************************************

Eigen as it currently stands fails to cover the needs of most of the projects 
it wants to help, because it's too limited. When we started, we believed we 
should make Eigen as small and simple as possible, and later the CRTP-based 
design led me to cut even more functionality (restricting to square 
matrices). As a result Eigen 1 looks more like a course in efficient C++, 
than like a useful library. It also turns out that we underestimated the 
needs of applications.

Here's a state of the projects using Eigen or considering to:
- Kalzium/Avogadro and Franz's student project seem to be happy with Eigen 1.
- OpenBabel needs eigenvalue computation and could benefit from a sparse 
- KSpread seems to need rectangular matrices.
- Krita needs a sparse solver and sparse least squares, and currently uses GMM
  for that. However it might also use Eigen for other stuff,
  so providing a single library would be best.

*** Plans for Eigen 2 ******************************************************

I have a pretty clear idea of what I'd like to do, only I lack some time 
currently, so this is mostly to:
 - gather feedback in case I forgot something
 - tell you that I'm thinking about your needs
 - hopefully some of you can give me a helping hand

The main ideas for Eigen 2 are:
 - separate three types of matrices/vectors:
   - fixed-size
   - dynamic-size dense
   - dynamic-size sparse

 - The fixed-size classes should be the Matrix and Vector templates from Eigen
   1, except that they should allow rectangularness. The dynamic-size classes
   should be wrappers around GMM classes.

 - don't try to let different types share code, and no CRTP anymore.

 - provide a uniform API across the different types, as far as applicable

 - Eventually we'll add copy-on-write to the dynamic-size classes, but
   that's only a performance issue so not an immediate priority.

 - As for the directory structure in kdesupport/, it would mean moving gmm/
   back inside eigen/.

 - As to staying simple for simple things, I think it could be achieved by
   clearly separating the various types in the documentation, and by providing
   plenty of examples.

I have a question to KDE people: as a template library, will Eigen have to 
preserve compatibility for the whole KDE4 lifecycle ?


PS. If you want to subscribe to this list, send a mail with 
subject "subscribe" to eigen-request@xxxxxxxxxxxxxxxxxxx

PS. Bensch: I know this contradicts what I used to say, that Eigen should stay 
simple and you should use GMM instead for advanced stuff, but you guessed how 
insecure I felt about that. I guess I lacked time for a big rework of Eigen, 
so I wanted to find excuses for that.

PS. Bensch: do you think we could restrict to one single type of sparse 
matrices, like column-compressed? Or is it useful to expose all the types GMM 
has? What types have you used so far?

Attachment: pgpcXPZsk6c8t.pgp
Description: PGP signature

Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/