On Fri, 17 Oct 2025 09:25:01 GMT, Per Minborg <[email protected]> wrote:

>> Implement JEP 526: Lazy Constants (Second Preview)
>> 
>> The lazy list/map implementations are broken out from `ImmutableCollections` 
>> to a separate class.
>> 
>> The old benchmarks are not moved/renamed to allow comparison with previous 
>> releases.
>> 
>> `java.util.Optional` is updated so that its field is annotated with 
>> `@Stable`.  This is to allow `Optional` instances to be held in lazy 
>> constants and still provide constant folding.
>
> Per Minborg has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Update javadocs

src/java.base/share/classes/java/lang/LazyConstant.java line 101:

> 99:  * {@linkplain Error}, that {@linkplain Throwable} is propagated to the 
> caller, and the
> 100:  * lazy constant remains uninitialized. In other words, upon an 
> unsuccessful invocation of
> 101:  * the computing function, neither a constant, the exception, nor the 
> fact that

"In other words" I don't think this sentence adds much. I think it's better to 
just drop it. The main thing to say is that if computing function is 
unsuccessful, the lazy constant stays uninitialized (which we already said).

src/java.base/share/classes/java/lang/LazyConstant.java line 111:

> 109:  * which are held by lazy constants:
> 110:  *
> 111:  * {@snippet lang = java:

If you wanted, you could reuse the `Component`  class -- that one already has a 
lazy constant field, so if you put the component itself in another lazy 
constant field you have your composition example.

src/java.base/share/classes/java/lang/LazyConstant.java line 144:

> 142:  *
> 143:  * <h2 id="thread-safety">Thread Safety</h2>
> 144:  * A lazy constant is guaranteed to be initialized atomically and at 
> most once. If

We already mention some of these above:

"Furthermore, {@linkplain #get()} guarantees that, out of several threads 
trying to
 * invoke the computing function simultaneously, only one is ever selected for
 * computation"
 
 Maybe add a reference form that text to this section?

src/java.base/share/classes/java/lang/LazyConstant.java line 152:

> 150:  * <p>
> 151:  * The invocation of the computing function and the resulting 
> initialization of
> 152:  * the constant {@linkplain java.util.concurrent##MemoryVisibility 
> <em>happens-before</em>}

Do you mean constant or content? I think the latter? E.g. when you initialize a 
lazy constant, you safely publish its contents? (the lazy constant itself is 
already published)

src/java.base/share/classes/java/lang/LazyConstant.java line 158:

> 156:  * Thread interruption does not cancel the initialization of a lazy 
> constant. In other
> 157:  * words, if the computing thread is interrupted, {@code 
> LazyConstant::get} doesn't clear
> 158:  * the interrupted thread’s status, nor does it throw an 
> InterruptedException.

Suggestion:

 * the interrupted thread’s status, nor does it throw an {@code 
InterruptedException}.

src/java.base/share/classes/java/lang/LazyConstant.java line 164:

> 162:  *
> 163:  * <h2 id="performance">Performance</h2>
> 164:  * A lazy constant can never change after it has been initialized. 
> Therefore,

The contents of a lazy constant can never change after the lazy constant has 
been initialized (again, spell out things clearly)

src/java.base/share/classes/java/lang/LazyConstant.java line 166:

> 164:  * A lazy constant can never change after it has been initialized. 
> Therefore,
> 165:  * a JVM implementation may, for an initialized lazy constant, elide all 
> future reads
> 166:  * of that lazy constant and instead directly use any constant that it 
> has previously

"elide all future reads of that lazy constant's contents and instead use the 
contents that has been previously observed"

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

PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439091644
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439096445
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439102301
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439110166
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439114804
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439119542
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439124386

Reply via email to