this occurred to me some days ago and I’d like to hear what others think.
Operator += can’t be user defined but instead is extended to a combination
of “+” and assignment:
“x += y” becomes implicitely “x = x + y”.
Now, wouldn’t it be better to turn that around and have people define
operator += and automatically convert operator + like in:
“x + y” becomes implicitely “x.dup += y”
The reason I’m offering this is performance: “x = x + y” is slower than an
inplace manipulation (that += would do), which is often what’s desired
On the downside:
This will likely break a lot of code already defined unless one would
allow to define “+” for a while (possibly with a warning).
The change has subtle effects, i.e., people relying on “x += y” to
create a new instance and not changing the state of x might encounter
dup might or might not be the appropriate method to create a copy
depending on the class at hand. When defining operator +, we are currently
free in deciding what’s the type of result of this operation. That
freedom would definitely go away.
What do others think? Did I overlook something?