I was just thinking/imagining of the following refactoring and additional features. Please note that these just ideas and that I cannot yet tell how much time we need for each task.
One could refactor ublas such that - there is only one definition of iterators for all types of matrix and vector template classes including the proxies (instead of defining one within each template class), - replacing project functions with overloaded operators in the template classes using a notation that is similar to the one in MATLAB.
I am not sure, but we might also
- replace template classes for expression templates by generic lambdas,
- removing some proxies matrix_row, matrix_column (was it designed to establish type safety?)
We might additionally
- replace expression templates by 'smart' expression templates in order to call functions of high-performance libraries
- on top of smart expression templates include dispatchers or even schedulers with which we could dispatch between cpu and gpu execution.
Based on my tensor implementation we could discuss these issues in more detail.