bearophile wrote:
Don:
**Don't overload arithmetic operators unless you are doing arithmetic.**<
Are there few non-arithmetic operators (that will support operator overloading
too) with a clear semantics that can be added to D?
The main problems here are that such operators are very few, they may end being
used only in special situations, so may be unworth being added to the language,
and of course ASCII has very few symbols fit for such purpose.
Not many. I did look through all the unicode symbols, and even there,
there's not many you'd want. Generally, unary operations aren't
necessary (a function call looks quite OK).
__dot, __cross would be the most useful. They are arithmetic, of course.
Set operations.
__union, __intersection, __subset, __superset, __subseteq, __superseteq.
After that things get really obscure and pretty hard to justify. But
__dot would be extremely valuable, I think. Especially since we have
array operations in the language, and a[]*b[] is defined as element-wise
multiplication.
An IDE/text editor could translate __dot into the relevant Unicode
character.
For example I have implemented in D the Python sets with (almost) the same
semantics (it's not equal because the operator overlading of D is a bit less
powerful than the Python one. No one has so far given me an answer about this
silly limit). Some of their operators/methods are:
s.issubset(t) s <= t test whether every element in s is in t
s.issuperset(t) s >= t test whether every element in t is in s
s.union(t) s | t new set with elements from both s and t
s.intersection(t) s & t new set with elements common to s and t
s.difference(t) s - t new set with elements in s but not in t
s.symmetric_difference(t) s ^ t new set with elements in either s or t but not both
So you end using <= => | & ^ - for set operations too, but in real math you
want to use a different set of symbols here. And such standard set of symbols is more
readable (and unambiguous) compared to that ASCII mapping. APL (and the following
languages like J/K/etc) is unreadable also because the symbols it uses are not standard
outside the language.
Bye,
bearophile