Briefest summary of today's Valhalla+nullness picture
Brian Goetz
brian.goetz at oracle.com
Thu Jun 1 19:38:01 UTC 2023
> 1. If your class doesn't do Identity Things, make it a value class.
> The VM can do smarter things now.
Which also makes your class safer too!
> 2. `==` isn't really an Identity Thing: it will just continue to mean
> "observably identical*" as it always has. System.hashCode() remains
> defined in terms of `==`. But actual identity dependence will fail
> (when feasible, at compile time).
Some readers might retort that the cost of this is `==` went from
ultra-super-cheap to maybe-but-who-knows. We might counter-retort that
such micro-performance concerns are usually a distraction.
> 3. Any type based on that class can be marked as nullable `?` or
> non-null `!`. Conceptually (if not literally), `Foo!` is a subtype of
> `Foo?`.
Where by "conceptually" you are appealing to "is-a".
> 4. Nullness enforcement is "best-effort" and better than nothing. *If*
> you want the gory details of what's enforced you can dig into them.
> There's still room for third-party nullness analysis tools to help.
>
> 5. If a value class has a do-nothing constructor, and you're fine with
> non-null variables of that type being initialized to that value, add
> `implicit` to the constructor. The VM can do more smarter things now.
>
> 6. Consider adding `non-atomic` to the class; the VM can do even morer
> smarter things now. The downside is that racy code (already risky)
> might fail in worse ways; you decide if that worries you or not.
And specifically, if your class has cross-field invariants, it should
worry you.
> 7. The above holds for the 8 primitive types too; yes, they are still
> special, but mostly in /additional/ ways, rather than exceptions to
> the usual rules. `int` and `Integer!` are now nearly synonymous.
>
> And we can finally all retire the term "primitive class" now at last. :-)
Praise be.
> While that list is meant to have asterisks and just be "good enough
> for most people most of the time", it might need some important
> corrections nevertheless, so, I'm glad to hear them.
>
>
> * yes float/double are weird
>
> --
> Kevin Bourrillion | Java/Kotlin Ecosystem Team | Google,
> Inc. |kevinb at google.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/valhalla-spec-experts/attachments/20230601/59850b05/attachment-0001.htm>
More information about the valhalla-spec-experts
mailing list