JC wrote:
I do a lot of linear work with economic models in D at work. For this reason I created small matrix and vector package that makes use of the ATLAS library. Most of the time I don't know the sizes of the matrices and vectors that I am working with until runtime. Because of this and to keep the memory contiguous, the backend of my package is implemented as a dynamic single dimensional array.

Is your library available online? It would be helpful to be able to take a look at it.


Because of this and the fact that static arrays cannot exceed 16Mb (according to the D1 docs), I would suggest just working with opIndex(i,j) instead of the arrays themselves.

Just my 2 cents,
JC

Lars Kyllingstad wrote:
I am writing a D library based some of the stuff in SLATEC, and I've come to a point where I need to decide on a way to manipulate vectors and matrices. To that end, I have some ideas and questions I would like comments on from the community.

Ideally, I want to restrict the user as little as possible, so I'm writing heavily templated code in which one can use both library-defined vector/matrix types and built-in arrays (both static and dynamic). My reasons for this are:

a) Different problems may benefit from different types. Sparse matrices, dense matrices, triangular matrices, etc. can all be represented differently based on efficiency and/or memory requirements.

b) I hope that, at some point, my library will be of such a quality that it may be useful to others, and in that event I will release it. Interoperability with other libraries is therefore a goal for me, and a part of this is to let the user choose other vector/matrix types than the ones provided by me.

c) Often, for reasons of both efficiency and simplicity, it is desirable to use arrays directly.

My first question goes to those among you who do a lot of linear algebra in D: Do you think supporting both library types and arrays is worth the trouble? Or should I just go with one and be done with it?


A user-defined matrix type would have opIndex(i,j) defined, and to retrieve elements one would write m[i,j]. However, the syntax for two-dimensional arrays is m[i][j], and this means I have to put a lot of static ifs around my code, in order to check the type every time I access a matrix. This leads me to my second question, which is a suggestion for a language change, so I expect a lot of resistance. :)

Would it be problematic to define m[i,j,...] to be equivalent to m[i][j][...] for built-in arrays, so that arrays and user-defined types could be used interchangeably?

(And, importantly, are there anyone but me who think they would benefit from this?)


-Lars

Reply via email to