Giter VIP home page Giter VIP logo

Comments (5)

headius avatar headius commented on September 4, 2024

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.

DemiMarie avatar DemiMarie commented on September 4, 2024

@headius I think we would need to use libffi OR generate a custom stub in C or assembler.

from jffi.

laszlohordos avatar laszlohordos commented on September 4, 2024

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.

headius avatar headius commented on September 4, 2024

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.

headius avatar headius commented on September 4, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.