New candidate JEP: 412: Foreign Function & Memory API (Incubator)

Remi Forax forax at univ-mlv.fr
Thu Apr 22 22:54:32 UTC 2021


----- Mail original -----
> De: "Gerard Ziemski" <gerard.ziemski at oracle.com>
> À: "panama-dev at openjdk.java.net'" <panama-dev at openjdk.java.net>
> Cc: "Maurizio Cimadamore" <maurizio.cimadamore at oracle.com>, "jdk-dev" <jdk-dev at openjdk.java.net>
> Envoyé: Jeudi 22 Avril 2021 23:42:56
> Objet: Re: New candidate JEP: 412: Foreign Function & Memory API (Incubator)

> hi,

Hi,

> 
> I read this JEP only once so far, but one thing that I immediately noticed was
> whether MethodType is really necessary when constructing a MethodHandle, or
> whether that info can be inferred from FunctionDescriptor as in this given
> example:
> 
> 
> MethodHandle qsort = CLinker.getInstance().downcallHandle(
>        LibraryLookup.ofDefault().lookup("qsort").get(),
>        MethodType.methodType(void.class, MemoryAddress.class, long.class,
>                              long.class, MemoryAddress.class),
>        FunctionDescriptor.ofVoid(C_POINTER, C_LONG, C_LONG, C_POINTER)
> );
> 
> Seems to me that FunctionDescriptor and MethodType describe the same layout ?

MethodType is the Java signature, FunctionDescriptor is the C signature,
the CLinker is the one knowing the C convention on the actual Archiecture/OS (by example, the first two parameters are in registers, etc) so CLinker is able to expose the symbol "qsort" with the FunctionDescriptor as a method handle with the MethodType.

As noted at the end of the JEP, this is the low level API, there is a tool named jextract that provides a more high level API by generating the mapping from a C header file.

> 
> 
> cheers

regards,
Rémi

> 
>> On Apr 22, 2021, at 1:27 PM, mark.reinhold at oracle.com wrote:
>> 
>> https://openjdk.java.net/jeps/412
>> 
>>  Summary: Introduce an API by which Java programs can interoperate with
>>  code and data outside of the Java runtime. By efficiently invoking
>>  foreign functions (i.e., code outside the JVM), and by safely accessing
>>  foreign memory (i.e., memory not managed by the JVM), the API enables
>>  Java programs to call native libraries and process native data without
>>  the brittleness and danger of JNI.
>> 
> > - Mark


More information about the jdk-dev mailing list