True, there are non-commutative maths, but the ones that I can think of offhand that are generalizations of the ones implemented in Squeak, such as quaternions and Cayley numbers, are built out of components which are manipulated by commutative operators. So it seems reasonable to build the general number system such that the standard operators (addition and multiplication in particular) are commutative, and then design the non-commutative systems with the appropriate constraints, rather than constraining the base number systems to favor the more complex and less-used non-commutative systems.
If you are attempting to do some kind of generic functions, you will have to deal with non-commutative math anyway, I.E. for subtraction and division. It only takes a little bit of care to preserve argument order for the traditionally-commutative operations of addition and multiplication as well, so it is better to preserve it when you can.
I feel it IS worth the care for numerics.
I.e. (s is a scaler, X is multiplication)
| a b | | c d | X s
=
| as bs | | cs ds |
and
s X | a b | | c d |
=
| sa sb | | sc sd |
Symbolic math can be a bit tougher:
(x + y)(x + y) = x^2 + xy + yx + y^2
hence, you may want to be able to specify that the algebra is commutative to the reduction engine.
-- Mike Klein
squeak-dev@lists.squeakfoundation.org