Andrei Alexandrescu wrote:
I've had a talk with Walter today, and two interesting things transpired.
First off, Walter pointed out that I was wrong about one conversion rule
(google value preservation vs. type preservation). It turns out that
everything that's unsigned and less than int is actually converted to
int, NOT unsigned int as I thought. This is the case in C, C++, and D.
That has some interesting consequences.
ushort x = 0xFFFF;
short y = x;
printf("%d %d %d\n", x>>1, y>>1, y>>>1);
// prints: 32767 -1 2147483647
What a curious beast the >>> operator is!
I'm very excited about polysemy. It's entirely original to D, covers a
class of problems that can't be addressed with any of the known
techniques (subtyping, coercion...) and has a kick-ass name to boot.
I agree. By making the type system looser in the one place where you
actually need it to be loose, you can tighten it everywhere else. Fantastic.