Short answer: deprecation is a way to mark an API element such that it
generates warnings when used. One variant of deprecation indicates the
API element is intended to be removed in some future, unspecified, release.
Longer answer: see around slide 62 of
"Contributing to OpenJDK: Participating in stewardship for the long-term"
https://jcp.org/aboutJava/communityprocess/ec-public/materials/2023-06-13/Contributing_to_OpenJDK_2023_04_12.pdf
Recording of the talk:
https://jcp.org/aboutJava/communityprocess/media/Public-EC-Meeting-June-2023.mp4
HTH,
-Joe
On 12/2/2024 9:19 PM, David Alayachew wrote:
Thanks Joe.
Ok, so deprecations are basically a super-regulated way to achieve a
certain amount of backwards incompatibility without breaking Java's
core promise?
On Mon, Dec 2, 2024, 11:17 PM Joseph D. Darcy <[email protected]>
wrote:
There is a policy for managing deprecations:
https://openjdk.org/jeps/277
Most the incompatible step, actually removing the declaration in
question, if it occurs at all, would only occur after a warning
period.
HTH,
-Joe
On 12/2/2024 6:24 PM, David Alayachew wrote:
As a data point of one, we use all of the abovementioned
constants regularly for my day job. In total, we have maybe a
couple thousand instances of that constant being referenced.
Ripping out wouldn't be too painful as long as I was told exactly
what the replacements were, but I wouldn't be thrilled with it.
Also, wouldn't this qualify as a backwards-incompatible change?
On Mon, Dec 2, 2024, 8:32 PM Joseph D. Darcy
<[email protected]> wrote:
Hmm. I understand the motivation here and the asymmetry with
the integral types, but on the whole I don't think
deprecating {Float, Double}.MIN_VALUE and recommending use of
a differently-named field with the same value would be a net
improvement.
-Joe
On 12/2/2024 3:17 PM, Éamonn McManus wrote:
At Google, we've had several issues over the years relating
to Double.MIN_VALUE. People have not unreasonably supposed
that Double.MIN_VALUE has the same relationship to
Double.MAX_VALUE as Integer.MIN_VALUE has to
Integer.MAX_VALUE. So they think that Double.MIN_VALUE is
the (finite) negative number of largest magnitude, rather
than the positive number of smallest magnitude. We're
currently thinking of adding a constant MIN_POSITIVE_VALUE
to Guava's Doubles
<https://urldefense.com/v3/__https://guava.dev/releases/snapshot-jre/api/docs/com/google/common/primitives/Doubles.html__;!!ACWV5N9M2RV99hQ!PaT7OCGf7CncxF09sKLO4p39KkraAtzbBbvnOR8O8r2x6Z0e1zru8BqG9LGItQtyxAQkQc8A12DanwunC_ZxkNGO$>
class
and having static analysis that suggests using that instead
of Double.MIN_VALUE, if that is indeed what you meant, or of
course using -Double.MAX_VALUE if *that* is what you meant.
A few JDK and JavaFX bugs show that Google engineers are not
the only ones to be confused by this:
https://bugs.openjdk.org/browse/JDK-4218647
https://bugs.openjdk.org/browse/JDK-8092698
https://bugs.openjdk.org/browse/JDK-8156186
So we also wonder if it would make sense to deprecate
Double.MIN_VALUE itself and introduce
Double.MIN_POSITIVE_VALUE with the same meaning. Obviously
the same thing would apply to Float.