> 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.
Maurizio Cimadamore has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since the last revision: - Merge branch 'master' into arrayElemVarHandle - Address review comments - Inital push ------------- Changes: - all: https://git.openjdk.org/jdk/pull/16272/files - new: https://git.openjdk.org/jdk/pull/16272/files/ee6c3579..7d6659c9 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=16272&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=16272&range=01-02 Stats: 2404 lines in 66 files changed: 1914 ins; 226 del; 264 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