[foreign-memaccess+abi] RFR: 8273905: Foreign API refresh [v4]

Uwe Schindler uschindler at openjdk.java.net
Sat Sep 18 21:30:55 UTC 2021


On Fri, 17 Sep 2021 17:16:58 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>> As outlined in [1], there are areas of the foreign API we'd like to improve upon, such as:
>> 
>> * dereference: there is a mismatch between API points which create segments (which take a layout) and dereference API points, which do not take layouts
>> 
>> * role of `MemoryAddress`: in Java 17, `MemoryAddress` has become a stateful carrier, which is attached to a scope. This is inconvenient, as in most cases, a memory address is just a raw pointer that arises when interacting with native code.
>> 
>> * resource scopes: the API for scopes has too many flavors to pick from, many of which overlap. The fact that scopes and segment allocators are unrelated forces clients to introduce ad hoc conversions from scopes to allocators, and library developers to add overloads. Finally, the API for acquiring scopes doesn't work well with try-with-resources, and could also be simplified. 
>> 
>> I will add separate comments to explain how the API has changed to resolve the above issues.
>> 
>> [1] - https://mail.openjdk.java.net/pipermail/panama-dev/2021-September/014946.html
>
> Maurizio Cimadamore has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Cleanup up code, following some IDEA suggestions.
>   * unused imports
>   * suggestions for new language features
>   * drop unused impl declarations
>   * removed size constructor parameter in value layout subclasses (except `OfAddress`)

Changes requested by uschindler (no project role).

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

> 1542:         Objects.requireNonNull(dstArray);
> 1543:         Objects.requireNonNull(srcLayout);
> 1544:         long baseAndScale = getBaseAndScale(dstArray.getClass());

Should we not add a check that the srcLayout's carrier type fits the dstArray type?

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

> 1578:         Objects.requireNonNull(srcArray);
> 1579:         Objects.requireNonNull(dstSegment);
> 1580:         Objects.requireNonNull(dstLayout);

same here: dstLayout's carrier type should be srcArray's type.

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

PR: https://git.openjdk.java.net/panama-foreign/pull/576


More information about the panama-dev mailing list