[foreign-memaccess] RFR: 8248487: Add static helpers to access segments

Paul Sandoz paul.sandoz at oracle.com
Mon Jun 29 22:03:50 UTC 2020


So many choices…

Would we do this different If not incubating? Should they be lumped together to spread out into the primitive box types?

When/if MemorySegment becomes Addressable should the primitive accessors live on MemorySegment?

I expect it's useful to copyInto a preexisting Java array, since it could be common going to/from native.

It’s tempting to place all the primitive accessors and the array to/from methods to static methods of an MemoryAccess class (which can be imported statically). Then that class becomes busy, leaving the others more focused.




> On Jun 29, 2020, at 1:45 PM, Maurizio Cimadamore <mcimadamore at openjdk.java.net> wrote:
> 
> On Mon, 29 Jun 2020 16:40:19 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:
> 
>> This patch addresses some usability issues in the foreign memory API. First, it adds several static accessors for all
>> carrier types in MemoryLayouts (I'm thorn whether to add this in MemoryLayouts or MemoryHandles, suggestions welcome).
>> These accessors provide an access API that is similar to unsafe - all accessors expect a base address plus a byte
>> offset. In most cases the accessors can be used and direct VH usage can be dropped, which might make approaching this
>> API a bit easier.  Secondly, I've added a bunch of helpers to map a segment into _any_ array (as opposed to just
>> `byte[]`). This makes the API more symmetric, given that, after all we _were_ able to create a segment from _any_ array
>> (not just `byte[]`).
> 
> Ideally, we could use varargs notation here, but one problem with that is that, if we ever add ability to allocate
> "empty" array - as in:
> 
> MemoryAddress allocateArray(MemoryLayout elemLayout, long size)
> 

You lost me on this bit.

Paul.


> Then we risk ambiguities.
> 
> If we are ok to never add a method like the one above - after all, one can allocate an empty array as follows:
> 
> allocateArray(MemoryLayout.ofSequence(size, elemLayout))
> then this is less of a problem.
> 
> -------------
> 
> PR: https://git.openjdk.java.net/panama-foreign/pull/221



More information about the panama-dev mailing list