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