On 28.09.2016 06:02, Walter Bright wrote:
On 9/27/2016 6:18 PM, Minty Fresh wrote:
So, I'm just interested in other people's thoughts are on the subject,
and
whether there are any plans to allow overloading these operators
separately.

The limitations are deliberate based on the idea that comparison
operators need to be consistent and predictable, and should have a close
relationship to the mathematical meaning of the operators. Overloading
<= to mean something other than "less than or equal" is considered poor
style in D, and the same goes for the other arithmetic operators.
...

The restrictions enforce that <= computes a boolean result. "less than or equal" is not necessarily the same as "decide /now/ whether this is less than or equal and give me a boolean". The restriction is annoying if you are implementing e.g. symbolic algebra. opCmp is a good thing to have for the common case, but why disable opBinary?


The use of them to create DSLs (a technique called "expression
templates" in C++) is discouraged in D, for several reasons. The
recommended way to create DSLs in D is to parse strings using CTFE.

One anecdote: In the big-O library discussion, my initial proposal relied on string parsing. Andrei promptly criticized this and used operator overloading instead.

An excellent example of that is the std.regex package.
...

It's actually a bad example, because it is irrelevant: it is obviously a bad idea to implement regex using operator overloading, because the regex operators have no D equivalent.

Assume I have two symbolic expressions a and b:

Expression a=variable("a"), b=variable("b");

Why should I be allowed to do

auto c = a + b; // symbolic value a + b

but not

auto d = a <= b; // symbolic value a <= b

The string parsing approach is not useful here: how do I use existing expressions that are accessible in the scope to build new expressions?

Reply via email to