I did a little bit more research. The combination that actually fails
is RTLD_LAZY | RTLD_GLOBAL (what guile uses). So, you can actually
use:
- RTLD_LAZY | RTLD_GLOBAL
- RTLD_NOW | RTLD_GLOBAL
- RTLD_NOW | RTLD_LOCAL
I found the source code of dyld
* module/system/foreign-library.scm (load-foreign-library): On macOS
calling `dlopen` with RTLD_LAZY | RTLD_LOCAL causes a crash when calling
`dlsym`. There are a three working combinations:
- Using RTLD_NOW | RTLD_LOCAL
- Using RTLD_NOW | RTLD_GLOBAL
- Using RTLD_LAZY | RTLD_GLOBAL
For
A problem is that Guile doesn't really provide a god set of fast rank 1 ops.
None of them have strides!=1 for example (this is ok for regular vectors, but
it hurts for general arrays), and some are missing start/end or you have to
write wrappers yourself, like for the typed vectors (other than
I did some test ands wingo's superb compiler is about equally fast for a
hand made scheme loop as the automatic dispatch for getter and setter. It
e.g. can copy from
e.g. u8 to i16 in about 100 op's / second using native byte order. However
compiling it in C lead to nasty 2 Go ops / second. So for