RFR: 8318538: Add a way to obtain a strided var handle from a layout

Maurizio Cimadamore mcimadamore at openjdk.org
Thu Oct 19 18:26:12 UTC 2023


The 21 iteration of the FFM API used to contain a method, namely `ValueLayout::arrayElementVarHandle`. This var handle factory was useful when accessing elements in a flat array of variable size.

In 22, this method has been removed because:
* It was not general enough (it only worked with value layouts)
* A more useful/general version could be obtained with the following code:


MethodHandles.collectCoordinates(varHandle(elements), 1, scaleHandle());


Given that accessing variable-length array is rather common, and given that combining var handles is perceived as hard, we noticed that developers often tried to workaround by creating a sequence layout of maximal size, and then deriving a var handle from it. This feels suboptimal (as a new layout is created just so that we can select from it, and using this layout for anything else will likely lead to exceptions, because of its size).

For these reasons, we would like to expose this functionality as a new method in the `MemoryLayout` interface, namely `MemoryLayout::arrayElementVarHandle`. This method generalizes the old method in the 21 API, and is implemented in the obvious way, using a combinator (see above).

This PR also adds a lot of narrative text to describe how to deal with variable-length arrays, which should clarify the role of the new method.

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

Commit messages:
 - Inital push

Changes: https://git.openjdk.org/jdk/pull/16272/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=16272&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8318538
  Stats: 163 lines in 6 files changed: 119 ins; 20 del; 24 mod
  Patch: https://git.openjdk.org/jdk/pull/16272.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/16272/head:pull/16272

PR: https://git.openjdk.org/jdk/pull/16272


More information about the core-libs-dev mailing list