5) I notice that a lot of other people online prefer using fixed arrays not structs for Vectors in D, why?

It does make some calculations more straightforward. For example I have code that calculates distance between points as follows:

double euclideanDistance( double[] pt1, double[] pt2 ) in {
    assert( pt1.length == pt2.length );
  } body {
      return sqrt(
0.0.reduce!( (sum,pair) => sum + (pair[0]-pair[1])^^2)(zip(pt1, pt2))
      );
}

Now a point is not a vector, but they are similar in many respects. That fact that I use an array for my points makes such calculations possible. Furthermore you can always add methods to your struct that let users access the appropriate indices as x, y and z. If you use UFCS (I haven't yet) you could make these appear to user code just as if you had named your variables x, y, and z.

Finally, maybe as some point you want to support vectors of varied dimension ... it then becomes easier to port your struct.


6) Any other comments or suggestions?

Once you have your design more or less settled you should make it generic (if not for practical reasons just for fun and experience). You likely want your type to support only floating-point values, so you can see here how types can be restricted to FP (see line 50).

https://github.com/craig-dillabaugh/phobos/blob/master/std/complex.d

Thats my fork of the Phobos libraries, likely a bit out of date, but I was too lazy to look up the prope URL.

Reply via email to