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.

Reply via email to