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 <bufferlogh...@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 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/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/CADbpEJsWbg2yLBC2EisLTjmENut3shCD_3dsCYrOE9dYYZO9mQ%40mail.gmail.com.

Reply via email to