[foreign-preview] RFR: 8282026: Remove support for unbound sequence layouts [v2]
Maurizio Cimadamore
mcimadamore at openjdk.java.net
Fri Feb 18 22:27:33 UTC 2022
> When doing a pass over the memory layout API, I couldn't help noting that the API implementation and specification are made more complex by the fact that we have to specify what happens when a sequence layout *without a size* is found. Support for unbounded sequence layout was added many moons ago, with the understanding that it would have made life for jextract easier.
>
> This is not the case; all cases where jextract is using an unbounded sequence layout today can be replaced with using a simple zero-length sequence (which is allowed by the API, as are empty structs/unions).
>
> I also found that the only real use case for using unbounded sequence layout came from a quirk in the API to obtain var handles from layout. That is, if we want to obtain an indexed var handle into a JAVA_INT, we have to do the following:
>
>
> VarHandle intHandle = MemoryLayout.newSequenceLayout(JAVA_INT)
> .varHandle(PathElement.sequenceLayout());
>
>
> In hindsight, this is just boilerplate: in this case the user only cares about the element layout (`JAVA_INT`), but the API wants the user to wrap that element layout in a new sequence layout, only to then provide a path inside the sequence layout (which will add a free dimension to the resulting var handle).
>
> It is not hard to see that all the above can be simplified, by adding an extra API method on memory layouts:
>
>
> VarHandle intHandle = JAVA_INT.arrayElementVarHandle(JAVA_INT);
>
>
> This more explicit, succint, and provdies less opportunities for bugs to hide.
>
> Therefore, this patch removes support for unbounded sequence element; the net effect is that now _all_ layouts have a size - which significantly simplifies the use sites where layout sizes are computed (no need to use optional there). All without losing much in terms of expressiveness: zero-length sequence layout can be used in basically the same way in which unbounded sequence layouts were used before.
Maurizio Cimadamore has updated the pull request incrementally with one additional commit since the last revision:
Remove unused imports
Drop arrayElementSliceHandle
-------------
Changes:
- all: https://git.openjdk.java.net/panama-foreign/pull/642/files
- new: https://git.openjdk.java.net/panama-foreign/pull/642/files/a15648f7..a954e84e
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=642&range=01
- incr: https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=642&range=00-01
Stats: 28 lines in 7 files changed: 22 ins; 4 del; 2 mod
Patch: https://git.openjdk.java.net/panama-foreign/pull/642.diff
Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/642/head:pull/642
PR: https://git.openjdk.java.net/panama-foreign/pull/642
More information about the panama-dev
mailing list