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