[foreign-memaccess] RFR 8227394: Add MemorySegment::asByteBuffer convenience method

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu Jul 11 12:00:05 UTC 2019


Hi Jorn,
I gave some thought about this in the past, and my conclusion was mixed 
- and I filed this in the "you ain't gonna need it" bucket (YAGNI).

The motivations are that (i) it is really simple to emulate the API with 
the existing methods (as the implementation of the new method shows), 
and that (ii) the new API is, by necessity, a partial API - not all 
segments can be mapped onto a byte buffer - some are too large; while 
the existing API on memory address is total (thanks to the explicit int 
parameter).

In other words, the existing API on MemoryAddress supports what I 
believe to be the most important interop idiom: slicing a big memory 
segment into multiple < 32bits buffer views. I'm less convinced on the 
usefulness of turning an entire memory segment into a bytebuffer: if you 
really wanted to view the entire memory segment as a BB, maybe you just 
wanted to create a (direct) BB in the first place?

The current model is kind of easy to explain - the moves we allow are:

* ByteBuffer -> MemorySegment

* MemoryAddress + int -> ByteBuffer

This feels minimal. If we add another dimension, as per your patch:

* MemorySegment -> ByteBuffer

Then the next question is - should we allow also:

* ByteBuffer -> MemoryAddress? (e.g. create a big segment from the byte 
buffer and then have a memory address point at the BB offset)

Which feels a bit like a slippery slope. I'd be more confident in adding 
a facility like this after some real world validation.

What do you think?

Maurizio

On 11/07/2019 12:28, Jorn Vernee wrote:
> Hi,
>
> Please review this small patch that adds an asByteBuffer convenience 
> method to MemorySegment that returns a buffer the size of the segment.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8227394
> Webrev: 
> http://cr.openjdk.java.net/~jvernee/panama/webrevs/8227394/webrev.00/
>
> (note that the javadoc is largely taken from 
> MemoryAddress::asByteBuffer).
>
> My reason for adding this is that I wanted to reach for this method a 
> few times when playing with the API, but it didn't exist. So, I 
> thought it would be useful to have.
>
> (Also, I originally wanted to upload this to GitHub [1] to test out 
> the Skara [2] tools, but apparently that's not operational yet :) )
>
> Thanks,
> Jorn
>
> [1] : https://github.com/openjdk/panama/pull/1
> [2] : https://github.com/openjdk/skara#openjdk-project-skara


More information about the panama-dev mailing list