[foreign-memaccess+abi] RFR: 8270376: Finalize API for memory copy [v3]

Maurizio Cimadamore mcimadamore at openjdk.java.net
Thu Jul 15 11:17:19 UTC 2021


On Wed, 14 Jul 2021 11:24:46 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>> This patch ties up some loose ends with the MemoryCopy API, and it also prepares the ground for some other related refactorings in this area.
>> 
>> The meat of this patch is represented by the various changes in MemoryCopy, where all methods were renamed to simply `copy`, and the length parameter (now called `elementCount`) is always moved to the end.
>> 
>> I've also simplified naming of parameters, as I think distinguishing between `index` and `offset` is enough (e.g. an array has an index, a segment has an offset).
>> 
>> You will see that, at the very end of the class, three more copy methods have been added, which deal fully in terms of segments. I have also moved the complex layout-based memory segment copy operation (which does the swap) as a static method in this class, as I believe the static form makes the method more regular and usable.
>> 
>> I've made some changes to our uses of `copyFrom` in the linker, to use the new methods in `MemoryCopy` when the copy operation was performing slicing in the source/target segment, which I think makes the code more readable. Of course these changes are completely optional and could be omitted as well.
>
> Maurizio Cimadamore has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Fix whitespaces

I have finished reorganizing the code (as per previous proposal). I think the new organization makes a lot of sense: MemorySegment has static copy primitives which are general, and are front and center. `MemoryCopy` is conceptually mostly convenience (e.g. avoid slicing and creating views) - although internally we do things differently to avoid performance issues - but we hope that someday we'll be able to reconcile the two paths. In this sense `MemoryCopy` and `MemoryAccess` now look similar - in that it's clear they mostly provide sugar.

I'll deal with the `copyFrom` instance methods in a different PR, but this one sets the foundation: `copyFrom` are just more fluent, sugary, methods which are implemented using the static primitives. This is now made clear both by the API (copyFrom is a `default` method) and by the javadoc, which clearly says that a call to copyFrom can be rewritten as a call to the static copy method.

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

PR: https://git.openjdk.java.net/panama-foreign/pull/568


More information about the panama-dev mailing list