unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* Difficulty integrating with Swift/Objective-C
@ 2021-09-05  6:03 paul
  2021-09-05  8:26 ` Taylan Kammer
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: paul @ 2021-09-05  6:03 UTC (permalink / raw)
  To: guile-user

Good day,

I have an existing app which is written in Swift and runs on macOS 
10.15.  I would like to provide users a way of customising the app 
(initially just simple things like modifying keybindings for 
example, later hopefully more) and as a keen Emacs user, i'm 
inspired by the idea of providing a Schemey/Lispy interface for 
such extensions.  Guile looks like it'd be great for this.  If i 
understand correctly, it'd be best if i could bundle the Guile 
runtime as a static library with the app, and call out to it to 
evaluate user-provided code.  I haven't thought deeply about this 
interface yet; i thought i'd get a proof-of-concept working first. 
I wonder if i might humbly ask for some guidance on how to get it 
working, because after a couple of days i seem to have failed. 
I'm no C/threads/low-level guru, so my apologies if i'm doing 
something very dumb.

I had some difficulty getting my app to compile against Guile, but 
i eventually managed to link against a version of Guile installed 
with Homebrew (guile: stable 3.0.7 (bottled)), however when trying 
to boot it up i seemed to run into the same issue described by 
Jeffrey Walton [1].  My app would boot, and as soon as it hit the 
Guile initialisation calls, it would error with "allocating JIT 
code buffer failed: Permission denied, jit.c:5804: fatal: 
assertion failed".  While that person seems to imply the problem 
is with Apple's M1 silicon, i'm actually running an older machine 
(2.9 GHz Dual-Core Intel Core i5, macOS 11.5.2).  I then managed 
to get further by downloading the Guile release tarball version 
3.0.7 and and building with `./configure --enable-jit=no`; this 
got me a bit further, however it still didn't work: i think it is 
because some assumption Guile has about the thread it runs on, or 
when it's invoked, is violated.. but i'm unsure how to find out.

What i currently have, is this snippet.  It's being called from 
Swift land, in the `applicationDidFinishLaunching(_ aNotification: 
Notification)` function.  As far as i can tell, that _is_ the main 
thread.

```
#include "libguile.h"

static void* register_functions (void* data)
{
    SCM test = scm_c_eval_string("(+ 3 5)");
    int foo = scm_to_int(test);
    printf("foo = %d\n", foo);

    return NULL;
}

void run_guile() {
    printf("hello from C, before Guile\n");
    scm_init_guile();
    //scm_with_guile(&register_functions, NULL); // i've tried 
    only having this line uncommented, too, but that also causes 
    immediate crashes
    //scm_shell(0, NULL);
}
```

This compiles fine, and i see the "hello from C" line printed, but 
then it crashes.  The error seems to vary, here are some i've 
seen:

1. "Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)" at line 182 of 
pairs.h,
2. "Pre-boot error; key: misc-error, args: ("%search-path" "path 
is not a proper list: ~a" (("/usr/local/share/guile/3.0" 
"/usr/local/share/guile/site/3.0" "/usr/local/share/guile/site" 
. #<program 12503b140 124fc10fc>)) #f)", "Thread 1: signal 
SIGABRT", line 260 of throw.c
3. "Thread 1: EXC_BAD_ACCESS (code=1, address=0x9)", at line 585 
of weak-set.c.
4. I've also sometimes seen this one, 
https://lists.gnu.org/archive/html/emacs-bug-tracker/2020-01/msg00365.html, 
although perhaps that's indeed related to closed stdout.

Because these errors are different all the time i guess it's some 
race condition or threading issue?  I wonder if someone knows an 
avenue i can attempt to use to debug what's going on? 🙏

All the best,
paul

1. https://mail.gnu.org/archive/html/bug-guile/2021-03/msg00012.html



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-09-28 20:22 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-05  6:03 Difficulty integrating with Swift/Objective-C paul
2021-09-05  8:26 ` Taylan Kammer
2021-09-05  9:35   ` paul
2021-09-06 10:21   ` paul
2021-09-06 13:11     ` Taylan Kammer
2021-09-05 10:56 ` Chris Vine
2021-09-06 10:26   ` paul
2021-09-06 16:28     ` Chris Vine
2021-09-08 23:59 ` paul
2021-09-28 20:22   ` Aleix Conchillo Flaqué

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).