JVMLS 2019: Updates zum Projekt Panama

Auf dem JVM Language Summit 2019 stellte Maurizio Cimadomore Neuigkeiten zum Projekt Panama vor. Panama ist eine Alternative zu JNI (Java Native Interface) für die Einbindung von "fremden" (nicht-Java) APIs.

Mit Panama sollte die Komplexität bei der Einbindung von "fremden" APIs reduziert werden. An Beispiel von TensorFlow mit JNI wurde gezeigt, wie aufwendig das im Moment ist: Es sind ca. 3809 Code-Zeilen in C und noch weitere 7034 in Java notwendig um die Library über JNI einzubinden. Bei dieser Code-Basis ist auch der Aufwand zur Pflege bei neuen Versionen entsprechend hoch.

Panama vereinfacht diese Aufgabe:

jextract -C -x -C c++  \
        -L /usr/local/lib -l tensorflow --record-library-path \
        -o tf.jar -t org.tensorflow.panama \
        /usr/local/include/tensorflow/c/c_api.h

Mit jextract wird eine "tf-jar" Datei erzeugt, die dann direkt im Projekt eingebunden werden kann:

import java.foreign.memory.Pointer;
import static org.tensorflow.panama.c_api_lib.*;
...
System.out.println("TensorFlow Version: " + Pointer.toString(TF_Version()));

Weitere Beispiele zur bereits unterstützen Libraries finden wir auf: http://hg.openjdk.java.net/panama/dev/raw-file/foreign/doc/panama_foreign.html

Präsentation mit Details zum aktuellen Entwicklungsstand, die auf JVM Language Summit von Maurizio Cimadomore vorgestellt wurde, ist verfügbar auf YouTube: https://www.youtube.com/watch?v=r4dNRVWYaZI