[foreign-memaccess] RFR 8234814: Eager layout size computation trips on unbound sequence layouts
Jorn Vernee
jorn.vernee at oracle.com
Wed Nov 27 09:21:45 UTC 2019
Hi,
Some comments:
- SequenceLayout:
This overrides badSizeExceptionMessage. I see the subtle difference in
text, but a sequence layout can also have an unspecified size if the
element layout has an unspecified size, in which case the message in
AbstractLayout would be more correct. You could check whether the
current sequence has an element count and return
super.badSizeExceptionMessage() in that case, though I think going with
one message that reads "Cannot compute the size of a layout which is, or
depends on a sequence layout with unspecified size" in AbstractLayout
would be good enough.
- Shouldn't the JShell fix should go into jdk/jdk instead?
One observation:
* Looking at the tests; I think something like
`MemorySegment.allocateNative(8 + 8 * 4)` would in practice be more
likely `MemorySegment.allocateNative(layout.byteSize() +
MemoryLayout.ofSequence(4, MemoryLayouts.JAVA_DOUBLE).byteSize())` which
makes me think we need a SequenceLayout::withElementCount(long) method
to create a new layout with an element count from a sequence layout that
doesn't have one:
SequenceLayout vla =
MemoryLayout.ofSequence(MemoryLayouts.JAVA_DOUBLE);
MemoryLayout header = MemoryLayout.ofStruct(
MemoryLayouts.JAVA_INT.withName("size"),
MemoryLayout.ofPaddingBits(32),
vla.withName("arr"));
...
try (MemorySegment segment =
MemorySegment.allocateNative(header.byteSize() +
vla.withElementCount(4).byteSize())) {
...
Especially when 'vla' in the above example could be a lot more complex.
What do you think?
Cheers,
Jorn
On 26/11/2019 16:03, Maurizio Cimadamore wrote:
> After a discussion offline with Jorn I've decided to revert the
> changes to constants:
>
> cr.openjdk.java.net/~mcimadamore/panama/8234814_v3
>
> As some of the tests demonstrate, among the original goals of these
> JAVA_INT constants and friends was interop with ByteBuffers, hence the
> endianness set to BE.
>
> I'll leave it as is for now (after all, the behavior is documented).
> We can revise later, if needs be.
>
> Maurizio
>
> On 26/11/2019 14:46, Maurizio Cimadamore wrote:
>>
>> On 26/11/2019 14:40, Maurizio Cimadamore wrote:
>>> * constants such as JAVA_INT should use native order (this is, after
>>> all, the layout of an int in the VM)
>>
>> To expand a bit - we eventually would like to see these constants
>> moved in the primitive wrapper classes - e.g.
>>
>> MemoryLayout::JAVA_INT -> Integer::LAYOUT
>>
>> in which case I think these constants should return whatever layout
>> the VM thinks a Java int (in this case) has.
>>
>> Maurizio
>>
More information about the panama-dev
mailing list