[foreign-memaccess] RFR 8226949: Move memory access API to incubator module
Jorn Vernee
jbvernee at xs4all.nl
Mon Jul 1 18:43:40 UTC 2019
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