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

Per Minborg pminborg at openjdk.org
Fri Oct 20 06:28:35 UTC 2023


On Thu, 19 Oct 2023 20:49:13 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>> 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 incrementally with one additional commit since the last revision:
> 
>   Address review comments

Marked as reviewed by pminborg (Committer).

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

PR Review: https://git.openjdk.org/jdk/pull/16272#pullrequestreview-1689323317


More information about the core-libs-dev mailing list