Comments (5)
I agree it would be nice to be able to bind in Go libraries. However I'm not quite sure of the best way to implement this either.
from jffi.
@headius I think we would need to use libffi OR generate a custom stub in C or assembler.
from jffi.
I just want to share the result of my further research. Unfortunately I haven't found any documentation of JNR/JFFI which would explain how to use it properly. The examples are very basic and doesn't cover the richer functionality of the overall library. I was hesitating between pure JNI or JNR and definitely I saw the flexibility of the JNR but I just couldn't figure out the best way to use and not a single clue anywhere over the internet. I just wanted to call a Go implementation where I deal with String or ByteArray and return back with String or ByteArray and in case of error have the capability to report the issue.
I tried to define my own structs in C and use them and somehow leverage the @Out
annotation but I wasn't really sure how to use it and when/how to Free the memory. There are examples when memory is allocated in Java and Freed after the call byte what if memory is allocated in Go or C and return.
I also tried the simple int doSomething(byte *in, char **out)
scheme and I did a test with a 25Mb array to see the memory consumptions of the process. It was a base64 encoding so Java process started at 25Mb when it loaded the input and after I called the process it jumped up to 150-170Mb and GC claimed back it after the process so a simple call with JNR and using custom "Strut" made 5-6 copy in Java (I only monitored the Java memory). Mostly these tests and the lack of documentation which let me uncertain about the possible memory leaks and the complete missing best practices about error handling made me to use JNI which result in a simple Java code using JNI native declaration only and in Go I could leverage the full JNI interface and by following the documentation I believe there is no memory leak. Doing the same 25Mb test I got 3 copy only which also convinced me to use JNI. This JNR might have been nice to use and would gave me so more but due to the lack of documentation I was not able to use it for my need. Thank you and wish you happy coding and good luck with this project. I may check it in my next project but now it's a no-go.
from jffi.
Given the unusual types of Go, it probably is best to use a custom JNI stub...or to write a small C library that knows about Go's types but exposes its own exports using standard C types.
from jffi.
We need more assistance here, if this is actually a good idea. FFI can certainly support these calls, but currently they may require a lot of stitching to work right.
Closing for now, but if someone wants to help us work through some example code, I'm willing to explore the possibilities.
from jffi.
Related Issues (20)
- How to build win64 JNI? HOT 1
- Varargs support on Apple Silicon HOT 6
- Module name is not being set in base jar
- Can't build cleanly for FreeBSD/powerpc64 HOT 13
- Tests get stuck on aarch64 with openjdk 11 (Alpine Linux) HOT 1
- Update to JUnit5 and latest Maven Surefire Plugin HOT 2
- libjffi-1.2.so file is not present for s390x HOT 4
- Empty library archives? HOT 1
- Segmentation fault executing `Kernel.system("ls -lha")` inside Logstash HOT 5
- JVM crashes on setting callback for GTK3 signals HOT 2
- Issue with Apple Silicon Processor HOT 4
- JVM crash on Ubuntu 21 HOT 9
- Apple notarization failure HOT 12
- Update libffi to a newer version to support LoongArch HOT 2
- UnsatisfiedLinkError on Apple Silicon HOT 1
- s390x CI build not working, just falls back on x86_64 build
- Testsuite failures on 32-bit ARM arches HOT 2
- JFF crashes VM on invokeN0 on i386 and on armhf alltogether
- jffi9396993929588479283.so: /lib64/libc.so.6: version `GLIBC_2.27' not found HOT 55
- Close library HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jffi.