I'm interested in this. One of my little side projects is calling rust
binaries from J and J from rust binaries.

A wiki page that gives current examples of J calling c,rust, (anything
that compiles), et cetera ... with links to repos
and a little "FFI for Dummies" would be a valuable addition.

One thing Marshall said about BQN in his "APL for your Flying Saucer"
pages was the
decision to use external libraries for things like complex numbers.
This is good approach but
It requires good examples and documentation illustrating how it's done.

jdb

On Tue, Dec 7, 2021 at 6:32 AM Michal Wallace <[email protected]> wrote:
>
> Aha! It's working now. The basic flow was right, I just needed a lot of
> fiddling with the rust translations of the types.
>
> Thanks, everyone!
>
>
>
>
> On Tue, Dec 7, 2021 at 7:18 AM Michal Wallace <[email protected]>
> wrote:
>
> > Nice! My actual goal is to get J talking to godot (game engine). As it
> > happens, rust and haskell are apparently two of the most-developed languages
> > for writing godot extensions, so if this fails I may try your haskell
> > bindings.
> >
> > I got some rudimentary free pascal bindings working without much hassle
> > many years ago, so I think my problem really
> > is just not understanding the rust side, but I could have also
> > mis-translated something on the J end and just don't see it yet.
> >
> > (as for the crash, that's pretty much what i get too.) I think the j.so or
> > j.dylib library needs to be in the
> > current directory at the moment, and you'd need to change line 13 to tell
> > it what the filename is.
> >
> > The debugger tells me this, but I have no idea what I'm looking at here:
> >
> > ; id = {0xffffffff}, range = [0x00000001800fe110-0x00000001800fe260),
> > name="JDo"
> > ; Source location: unknown
> > 7FFCD598E110: 56                         pushq  %rsi
> > 7FFCD598E111: 57                         pushq  %rdi
> > 7FFCD598E112: 53                         pushq  %rbx
> > 7FFCD598E113: 48 83 EC 40                subq   $0x40, %rsp
> > 7FFCD598E117: C5 F8 29 74 24 30          vmovaps %xmm6, 0x30(%rsp)
> > 7FFCD598E11D: 48 8B 05 14 DC 3B 00       movq   0x3bdc14(%rip), %rax
> > 7FFCD598E124: 48 31 E0                   xorq   %rsp, %rax
> > 7FFCD598E127: 48 89 44 24 28             movq   %rax, 0x28(%rsp)
> > 7FFCD598E12C: 48 89 4C 24 20             movq   %rcx, 0x20(%rsp)
> > 7FFCD598E131: 8A 81 ED 01 00 00          movb   0x1ed(%rcx), %al
> > 7FFCD598E137: 84 C0                      testb  %al, %al
> > 7FFCD598E139: 0F 85 C6 00 00 00          jne    0x7ffcd598e205  ; <+245>
> > 7FFCD598E13F: 80 B9 E0 52 00 00 02       cmpb   $0x2, 0x52e0(%rcx)
> >
> > I think maybe this is the start (??) of the code for JDo, so it might be
> > the parameter is an invalid pointer, but I don't know how to interpret this.
> >
> >
> > On Mon, Dec 6, 2021 at 8:47 PM Vanessa McHale <[email protected]> wrote:
> >
> >> Hm, I’m not familiar with the dlopen crate, had you used it before? I
> >> can’t tell what’s going on under the hood!
> >>
> >> I was able to get FFI working by looking at
> >> https://github.com/jsoftware/stats_jserver4r/blob/4c94fc6df351fab34791aa9d78d158eaefd33b17/source/lib/j2r.c
> >> <
> >> https://github.com/jsoftware/stats_jserver4r/blob/4c94fc6df351fab34791aa9d78d158eaefd33b17/source/lib/j2r.c>
> >> and
> >> https://github.com/jsoftware/stats_jserver4r/blob/4c94fc6df351fab34791aa9d78d158eaefd33b17/source/lib/r2j.c
> >> <
> >> https://github.com/jsoftware/stats_jserver4r/blob/4c94fc6df351fab34791aa9d78d158eaefd33b17/source/lib/r2j.c
> >> >
> >>
> >> I got Haskell bindings: https://github.com/vmchale/j-hs <
> >> https://github.com/vmchale/j-hs> but BUT interestingly one test fails on
> >> older GHCs… can’t tell why and I never did get around to debugging it.
> >>
> >> BTW I get
> >>
> >> error: test failed, to rerun pass '--lib'
> >>
> >> Caused by:
> >>   process didn't exit successfully:
> >> `/private/tmp/jlang-rs/target/debug/deps/jlang-1c90c81a3f6fae1c
> >> --nocapture` (signal: 11, SIGSEGV: invalid memory reference)
> >>
> >> on mac
> >>
> >> > On Dec 6, 2021, at 7:22 PM, bill lam <[email protected]> wrote:
> >> >
> >> > I don't know rust at all. What exactly do you expect and how it failed?
> >> >
> >> > On Tue, 7 Dec 2021 at 9:10 AM Michal Wallace <[email protected]>
> >> > wrote:
> >> >
> >> >> ... It was not a successfu attempt. :)
> >> >>
> >> >> https://github.com/tangentstorm/jlang-rs/blob/main/src/lib.rs
> >> >>
> >> >> The basic plumbing seems to work unless I actually call JDo() on line
> >> 75
> >> >> here.
> >> >> Any rust fans out there who might be able to help me figure this out?
> >> >>
> >> >> -Michal
> >> >> ----------------------------------------------------------------------
> >> >> For information about J forums see http://www.jsoftware.com/forums.htm
> >> >>
> >> > ----------------------------------------------------------------------
> >> > For information about J forums see http://www.jsoftware.com/forums.htm
> >>
> >> ----------------------------------------------------------------------
> >> For information about J forums see http://www.jsoftware.com/forums.htm
> >>
> >
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm



-- 
John D. Baker
[email protected]
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to