On Sat, Mar 15, 2014 at 01:28:11PM +0100, Antoine Pitrou wrote:
On Sat, 15 Mar 2014 12:20:42 +0000 Oscar Benjamin
wrote: I don't think it's a premature optimisation. It's a significant algorithmic optimisation.
You could also make the multiplications lazy (and enforce the optimal order when computing the final result) rather than enforce that optimization at the language parsing level. It would be more flexible, and would also avoid potentially pessimizing other use cases.
That sounds to me that you are suggesting that every single implementation of a matrix type that supports matrix multiplication needs to spend the considerable extra effort to make the multiplication lazy, in order to "potentially" avoid hurting hypothetical use-cases which don't exist now and may never exist. That's as clear a case of YAGNI as I've seen for a long time. We have one solid use-case for a matrix multiplication operator, and that's matrix multiplication. If matrix multiplication is most usefully treated as right-associative, then we ought to make it right- associative, and not burden the matrix multiplication operator with restrictions for the sake of hypothetical non-matrix-mult uses. In the same way that there is one good use-case for the numeric exponentiation operator ** , namely numeric exponentiation, and consequently it is right-associative because that's how the operator is most usefully treated. -- Steven