[foreign-memaccess] RFR 8226949: Move memory access API to incubator module
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Mon Jul 1 20:30:14 UTC 2019
Thanks!
Maurizio
On 01/07/2019 19:43, Jorn Vernee wrote:
> Looks good to me.
>
> Minor nit: MemorySegment.java added an import to MemorySegmentProxy
> but this is unused.
>
> Cheers,
> Jorn
>
> On 2019-06-28 16:51, Maurizio Cimadamore wrote:
>> Hi,
>> this patch moves the foreign memory access API to a separate incubator
>> module (jdk.incubator.foreign).
>>
>> It was a bit tricky to get this right, given the many dependencies we
>> have on java.base. We have the following constraints:
>>
>> * VarForm is package-private in j.l.invoke, and that means that
>> MemoryAddressVarHandle base should also live in there - which
>> basically means that all the generated classes and
>> AddressVarHandleGenerator should stay there too
>>
>> * Buffer is also package-private, which means that we can't just move
>> the scoped buffer implementations somewhere else
>>
>> This means that all the generated classes (for var handles and
>> buffers) stay where they are.
>>
>> Now, there are a couple of dependencies between such generated classes
>> (which will remain in java.base) and the mem access API:
>>
>> * the memory access var handles need to be able to call
>> MemoryAddressImpl::checkAccess, MemoryAddress::getUnsafeOffset and
>> MemoryAddress::getUnsafeBase
>>
>> * the scoped buffer classes need to be able to call
>> MemorySegmentImpl::checkValidState
>>
>> To workaround this problem, I resorted to a couple of "proxy"
>> interfaces which I put under java.base/jdk.internal.access.foreign
>>
>> There's also an issue with the Unsafe changes, since the methods added
>> to Unsafe also depend on signatures defined in the incubator module.
>> The workaround there is to create an 'unsafe' non-exported package
>> under jdk.incubator.foreign. This means that if people really want to
>> access unsafe capabilities of the API, they will have to do e.g.
>> --add-exports
>> jdk.incubator.foreign/jdk.incubator.foreign.unsafe=ALL-UNNAMED to
>> obtain access (which means that, if you run with the default
>> configuration, access to the ForeignUnsafe class is forbidden).
>>
>> As with all incubator modules, since these modules are not resolved by
>> default, the flag "--add-modules jdk.incubator.foreign" has to be
>> specified, both at compile-time and at runtime.
>>
>> Webrev:
>>
>> http://cr.openjdk.java.net/~mcimadamore/panama/8226949/
>>
>> Cheers
>> Maurizio
More information about the panama-dev
mailing list