Cool! Thanks again Chris. On Saturday, December 5, 2020 at 4:09:39 PM UTC+1 ch...@techascent.com wrote:
> You are most welcome :-). For numerical computation, libjulia-clj > <https://github.com/cnuernber/libjulia-clj> may interest you :-). > > On Sat, Dec 5, 2020 at 8:06 AM John Doe <buffer...@gmail.com> wrote: > >> Thank you Chris. It's very helpful. >> >> The approach you took for dtype-next is very interesting. This library is >> closer to my work (numerical computation). Also, the efficient use of Java >> heap is very interesting although I admit I don't know enough about it. >> This reminds me of Rich Hickey's emphasis of understanding data structures. >> >> On Friday, December 4, 2020 at 4:52:25 PM UTC+1 ch...@techascent.com >> wrote: >> >>> Ngwua, >>> >>> Looking through the caesium bindings just mentioned, it appears the >>> author dynamically creates an interface and then you can simply ask the >>> native library to instantiate a concrete implementation of that >>> interface >>> <https://github.com/lvh/caesium/blob/master/src/caesium/binding.clj#L701>. >>> So you do not always have to create a class with 'native' methods. >>> >>> Integrating with C libraries is part of the reason I wrote dtype-next >>> <https://github.com/cnuernber/dtype-next> which has the ability to >>> efficiently write/read from either java heap or native heap storage. >>> dtype-next has no dependency on either JNA or JNR. >>> >>> Hope this helps, >>> >>> Chris >>> >>> On Fri, Dec 4, 2020 at 7:53 AM John Doe <buffer...@gmail.com> wrote: >>> >>>> Hello Everyone, >>>> >>>> *Motivation:* I want to invoke C-code functions from Clojure: writing >>>> Java functions in Clojure. >>>> >>>> *Plan of Attack:* Rather than go with the JNI approach I want to >>>> interface with C-Library via JNR-FFI (https://github.com/jnr/jnr-ffi) >>>> >>>> Based on some example of using JNR-FFI >>>> >>>> https://github.com/jnr/jnr-ffi-examples/blob/master/getpid/src/main/java/getpid/Getpid.java >>>> >>>> >>>> https://www.programcreek.com/java-api-examples/?api=jnr.ffi.LibraryLoader >>>> >>>> The wrapper in Java might look like >>>> ``` >>>> package blahblah; >>>> >>>> public class BlahNative { >>>> private static int[] intDummy; >>>> private static double[] doubleDummy; >>>> >>>> public BlahNative() { >>>> } >>>> >>>> public static native void native_a(char var0, char var1, int var2, int >>>> var3, int var4, double[] var7, int var8, int var9); >>>> >>>> static { >>>> lib = LibraryLoader >>>> .create(LibSodium.class) >>>> .search("/usr/local/lib") >>>> .search("/opt/local/lib") >>>> .search("/usr/lib") >>>> .search("/lib") >>>> .load(LIBRARY_NAME); >>>> initializeLibrary(lib); >>>> } >>>> } >>>> ``` >>>> >>>> Question: For my package >>>> ``` >>>> (defproject mypkg >>>> :dependencies [[org.clojure/clojure "1.10.1"] >>>> [com.github.jnr/jnr-ffi "2.2.0"]]) >>>> ``` >>>> How do I write the wrapper for the native functions in >>>> ``` >>>> (ns mypkg.native >>>> (:import [jnr.ffi LibraryLoader]) >>>> (:import [jnr.ffi.annotations IgnoreError]) >>>> (:import [jnr.ffi.provider FFIProvider])) >>>> ``` >>>> For the Java interop I am assuming the above namespace should be based >>>> on gen-class (http://clojure-doc.org/articles/language/interop.html). >>>> >>>> What is not clear to me is: >>>> *1. How does one create the `native` method* (since most (defn foo) >>>> are static methods)? >>>> *2. How do I access the native functions after loading* the Native >>>> Library (LibraryLoader.load(LIBRARY_NAME))? >>>> >>>> I am neither a C nor a Java expert so any guidance will be much >>>> appreciated. >>>> >>>> Thanks, >>>> Ngwua >>>> >>>> -- >>>> >>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to clo...@googlegroups.com >>>> Note that posts from new members are moderated - please be patient with >>>> your first post. >>>> To unsubscribe from this group, send email to >>>> clojure+u...@googlegroups.com >>>> For more options, visit this group at >>>> http://groups.google.com/group/clojure?hl=en >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to clojure+u...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/clojure/3bd05d7a-297e-49cf-86d4-aec4a88c83cbn%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/clojure/3bd05d7a-297e-49cf-86d4-aec4a88c83cbn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/clojure/acd1be6c-5156-4316-98e2-e4df9d55566bn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/clojure/acd1be6c-5156-4316-98e2-e4df9d55566bn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/355b81e1-d5e7-4235-8a71-3797113c1527n%40googlegroups.com.