RFR: 8351565: Implement JEP 502: Stable Values (Preview) [v33]

Viktor Klang vklang at openjdk.org
Wed Apr 2 14:13:18 UTC 2025


On Wed, 2 Apr 2025 13:22:44 GMT, Per Minborg <pminborg at openjdk.org> wrote:

>> Implement JEP 502.
>> 
>> The PR passes tier1-tier3 tests.
>
> Per Minborg has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Add info that Map#values and Map#entrySet are stable

src/java.base/share/classes/java/lang/StableValue.java line 50:

> 48: 
> 49: /**
> 50:  * A stable value is a holder of shallowly immutable content that can be lazily computed.

This reads as if the content can only be shallowly immutable (not deeply immutable).

How about saying "effectively immutable" instead?

src/java.base/share/classes/java/lang/StableValue.java line 103:

> 101:  * instead, where the content is atomically and lazily computed via a
> 102:  * {@linkplain Supplier supplier}. In the example below, the supplier is provided in the
> 103:  * form of a lambda expression:

I suspect that developers might use the aforementioned snippet without knowing that under a race multiple logger instances may be created (even if only one is then used). So I'd put a comment  above trySet indicating that.

src/java.base/share/classes/java/lang/StableValue.java line 130:

> 128:  * <p>
> 129:  * Furthermore, {@code orElseSet()} guarantees that the supplier provided is
> 130:  * evaluated only once, even when {@code logger.orElseSet()} is invoked concurrently.

Suggestion:

 * evaluated at most once, even when {@code logger.orElseSet()} is invoked concurrently.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/23972#discussion_r2024907517
PR Review Comment: https://git.openjdk.org/jdk/pull/23972#discussion_r2024915663
PR Review Comment: https://git.openjdk.org/jdk/pull/23972#discussion_r2024917749


More information about the core-libs-dev mailing list