Array types
Norbert Nemec
Norbert at Nemec-online.de
Thu Aug 26 19:33:50 PDT 2010
Yippie-yeah! My favorite topic is being mentioned! I have to give a
comment... :-)
On 26/08/10 22:38, bearophile wrote:
> [...]
> So far in D code I have had need of (and I have seen some people need) some other kinds of arrays, not (well) supported by D:
> C) nD rectangular dynamic arrays;
> [...]
> The (C) arrays are not the same thing as dynamic arrays of dynamic arrays because:
> - Some algorithms are not designed for a triangle where rows may differ in length. Testing that rows are all the same length at runtime wastes time, and if you don't test it then it may cause bugs;
> - Sometimes you want to reshape a 2D matrix, so it's useful to store the matrix in contiguous memory;
> - Sometimes you need complex slicing, for example removal of some columns and rows from a 2D matrix.
>
> Recently in D.learn we have discussed this a bit.
>
> In C# there are both arrays of arrays as in D, and rectangular dynamic arrays, that are manages with a syntax similar to Pascal arrays: arr[x,y,z]. I think there is no so need to put them into D. But I think it's important to have a official type of them in Phobos, for example implemented as a struct (only the item type and number of dimensions are known at compile time):
>
> RectangularArray!(T, int ndimensions)
I still have my doubt that rectangular arrays can be implemented to full
power in the library. Currently, there is a number of essential
languages missing to allow a sane syntax:
* ranges 'A..B' as standalone expression
* following from this: replacement of opSlice by opIndex overloaded for
builtin type of range expression
* extension of range expression by stride (e.g. 'A..B:C' )
* handling of opDollar '$' for multiple dimensions
Beyond this, there are a few issues where I don't see that a
library-based solution will ever have the full power of a builtin
language feature:
* array expressions with clean and easy to use syntax
* syntax of type declarations: double[A,B] for static arrays and
something like double[[3]] or double[:,:] for dynamic arrays are just
far more straightforward and readable than any template-based syntax I
could imagine.
Ultimately, I think that rectangular arrays are as fundamental of
numerical computing as hash-maps and strings for other areas. Moreover,
there is a huge number of physicists working with Fortran95 simply
because it is about as simple to use as Basic, without classes, let
alone templates. The mere thought of having to touch classes or
templates would deter many of them to consider D an option.
More information about the Digitalmars-d
mailing list