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

Reply via email to