On Friday, 19 August 2016 at 08:31:39 UTC, Marco Leise wrote:
If we hypothetically switched to a ubyte+ubyte=ubyte semantic,
then code like this breaks silently:
However, if it took the entire statement into account, it could
handle that... by my rule, it would see there's a float in there
and thus automatically cast a and b to float before doing
anything.
The compiler would parse
Assign(float, Multiply(float, Parenthetical(Add(a, b))))
In a semantic transformation step, it would see that since the
lhs is float, the rhs is now casted to float, then it does that
recursively through it all and a and b get promoted to float so
the bits are never lost.
I really do think that would work.
Alas, I don't see D ever changing anyway, this is too deep in its
C bones.