RFR: 8264774: Implementation of Foreign Function and Memory API (Incubator) [v2]

Chris Hegarty chegar at openjdk.java.net
Wed Apr 28 13:12:55 UTC 2021

On Wed, 28 Apr 2021 10:42:54 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>> This PR contains the API and implementation changes for JEP-412 [1]. A more detailed description of such changes, to avoid repetitions during the review process, is included as a separate comment.
>> [1] - https://openjdk.java.net/jeps/412
> Maurizio Cimadamore has updated the pull request incrementally with one additional commit since the last revision:
>   Address first batch of review comments

Like Paul, I tracked the changes to this API in the Panama repo. Most of my remaining comments are small and come from re-reading the API docs.

src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/CLinker.java line 270:

> 268: 
> 269:     /**
> 270:      * Converts a Java string into a null-terminated C string, using the platform's default charset,

Sorry if this has come up before, but, is the platform's default charset the right choice here? For other areas, we choose UTF-8 as the default. In fact, there is a draft JEP to move the default charset to UTF-8. So if there is an implicit need to match the underlying platform's charset then this may need to be revisited.  For now, I just want to check that this is not an accidental reliance on the platform's default charset, but a deliberate one.

src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MemorySegment.java line 101:

> 99:  * <h2>Lifecycle and confinement</h2>
> 100:  *
> 101:  * Memory segments are associated to a resource scope (see {@link ResourceScope}), which can be accessed using

Typo?? "Memory segments are associated *with* a resource scope"

src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MemorySegment.java line 112:

> 110: MemoryAccess.getLong(segment); // already closed!
> 111:  * }</pre></blockquote>
> 112:  * Additionally, access to a memory segment in subject to the thread-confinement checks enforced by the owning scope; that is,

Typo?? "Additionally, access to a memory segment *is* subject to ..."

src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MemorySegment.java line 114:

> 112:  * Additionally, access to a memory segment in subject to the thread-confinement checks enforced by the owning scope; that is,
> 113:  * if the segment is associated with a shared scope, it can be accessed by multiple threads; if it is associated with a confined
> 114:  * scope, it can only be accessed by the thread which own the scope.

Typo?? "it can only be accessed by the thread which ownS the scope."

src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MemorySegment.java line 693:

> 691:      */
> 692:     static MemorySegment allocateNative(MemoryLayout layout, ResourceScope scope) {
> 693:         Objects.requireNonNull(scope);

Should the allocateNative methods declare that they throw ISE, if the given ResourceScope is not alive?   ( I found myself asking this q, then considering the behaviour of a SegmentAllocator that is asked to allocate after a RS has been closed )


Marked as reviewed by chegar (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/3699

More information about the core-libs-dev mailing list