Sorry I mean row vectors. (Left vector comes from what I usually say in quantum mechanics context…)
So,
- It’s not an arbitrary choice. It’s the associativity defined in math and it’s what implemented in every other languages that I know of and it’s what people relies on for non-associative multiplications (floating point for example)
- Right associative is only marginaly better, i.e. for matrix * column vector. It breaks everyones expectation in basically all other context and it doesn’t make sense to do it this way.
- It’s of course useful to have fast matrix multiplication that is done in the right order, as long as you don’t do this by changing the operator associativity, you can do whatever you want to implement it. (packages, or change the implementation of
*(args...)in Base for matrices are all acceptable solutions since none of them will affect unrelated cases)