Reader mail bag
Brian Goetz
brian.goetz at oracle.com
Thu Jun 1 17:34:53 UTC 2023
Some comments received on the -comments list over the past month or so:
-
https://mail.openjdk.org/pipermail/valhalla-spec-comments/2023-June/000049.html
(Quan Mai)
-
https://mail.openjdk.org/pipermail/valhalla-spec-comments/2023-April/000048.html
(Dmitry Paltatzidis)
-
https://mail.openjdk.org/pipermail/valhalla-spec-comments/2023-April/000047.html
(Victor Nazarov)
Victor N proposes "having immediate default" for B3 classes. This is
nicely evocative, but a bit long; we seem to be converging on
"implicitly constructible" for this term. Also "immediate" is a term
that is better known to assembly language programmers; "constructor" is
a term in the Java developer's lexicon.
Dmitry P reiterates some concerns about how users will be tempted to
overuse B3 "because performance", and end up creating less safe programs
as a result. He raises two examples, Rational and Range.
Rational is unfortunate because the default representation (when used
improperly) can lead to DBZE, but has a sensible default of zero --
except for that pesky denominator. However, I think this is a removable
discontinuity, where the author can make up for this with some careful
coding:
value class Rational {
private int n, d;
// obvious explicit and implicit ctor
public int num() { return n; }
public int denom() { return d == 0 ? 1 : 0; }
// logic uses num() and denom() rather than n/d
}
The moral of the story here is that sometimes class authors will have to
do some extra work to interpret the default representation as meaning
"what it should" if they want to take advantage of the benefits of B3,
but all of this can be encapsulated to the implementation.
The other moral hazard Dmitry P raises is the temptation to expose a
Range class that tears, "because performance". Indeed, Java developers
frequently write and publish broken code "because performance", and we
can't stop them -- all we can do is educate them. It is a valid fear
that people will over-rotate towards the new shiny rocket fuel, and in
fact quite likely that people will do so initially. We will have to use
the levers we have -- education, good examples, sufficiently scary
"don't be this guy" responses on Reddit and SO, IDE inspections, etc.
Quan M raises the concern that ! opts into both non-nullity and, for
non-atomic B3 classes, non-atomicity, and wonders whether there should
be an explicit use-site syntax for non-atomicity.
The answer to this is an emphatic "no". I direct readers to the posting
"On atomicity and tearing"; non-atomicity is not a feature to be
programmed with directly, as much as a way of trading off one bad
consequence vs another in the presence of broken programs.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/valhalla-spec-observers/attachments/20230601/86f2965d/attachment-0001.htm>
More information about the valhalla-spec-observers
mailing list