Updated State of the Specialization
Peter Levart
peter.levart at gmail.com
Mon Dec 22 10:00:04 UTC 2014
On 12/21/2014 05:07 PM, Brian Goetz wrote:
> Value types need to have some form of at least some of the core Object
> methods, at least hashCode, equals, and toString. Open questions here
> include:
>
> - Will there be some interface that specifies these? (C# has a root
> interfaces like this that all structs implement)
> - Will Object implement that interface? (Seems nice for generic
> code, but then it can't be called anything Value-ish, would have to be
> called Object-ish, like "Objectionable" or "Objectifiable" or
> "ObjectionYourHonor".)
>
> The compiler or VM would certainly generate default implementations of
> equals/hashCode that delegates to the components. A further open
> question is whether these could be overridden by value types, or
> whether this is just part of their definition. (And, if
> equals/hashCode are effectively final, its a little weird for toString
> to be standing alone, though would be permissible.)
I think default .equals() method for value types should be the bit-wise
compare of all fields. I think this is a very important canonical equals
and hard to implement in custom method easily (because of peculiarities
of float and double). Like default equals for reference types, it is an
equivalence relation with the greatest possible number of equivalence
classes. The default .hashCode() method could then be some quick
bit-wise sum of public fields. If there are no public fields, it would
simply be 0. Value types holding sensitive information would then have
to contain some public uniquifying field if they wanted to be used as
keys in hash maps or implement a secure hash algorithm if they hold
enough entropy.
Regards, Peter
More information about the valhalla-dev
mailing list