It doesn't match my experience, currently people have no expectation of what ==
means on a value type, if you explain that a value type has no identity, that
== doesn't work on a value type, most people are ok with that.
I think this is fantasy.
Value types are OBJECTS. People think they know what == means on an
Object, and for most users, the word "identity" does not come to mind.
Further, we've told people that "values have only state, no identity --
if two values have the same state, they are the same." For such values
not to be == will be astonishing.
Consider:
value class UnsignedInt {
public static UnsignedInt ZERO = ...
private int i;
public static add(UnsignedInt a, UnsignedInt b) { ... }
}
UnsignedInt x = ...
if (x != UnsignedInt.ZERO) { ... }
People will never, ever, ever get used to the idea that test is always
false. Its a fantasy to think otherwise. And the WHOLE POINT of
L-World is to allow people to not sweat the small details between values
and refs. This is asking them to be acutely aware all the time.