Last Saturday I released jlrs v0.7 which has two major new features.
First of all, you can now use functionality from jlrs when writing Rust code that is called from Julia using its
ccall interface. This function can call arbitrary functions defined in dynamic libraries that use the C ABI (ie functions marked with
extern "C", and possibly
#[no_mangle] in Rust). While this can be achieved without using jlrs, it’s now possible to use features from jlrs such as borrowing array data.
The second major feature is the introduction of an (experimental) async runtime. This feature is highly experimental and only works on Linux. With the async runtime you can use
Value::call_async to offload a function call to another thread (using
Base.Threads.@spawn) and wait for the result; while the computation is running the runtime is free to work on other tasks. This feature is experimental because it’s the first async code I’ve ever written and depends on some unstable features.
Additionally, some small features have been added. The biggest one of these is that there’s a new arrya type,
TypedArray, which is highly similar to
Array except that the type of the elements is explicitly known. The crate
jlrs-ndarray is now available to easily borrow array data from Julia as an
ArrayView(Mut) from ndarray.
The repository now contains several examples, so if you’re curious how to use these new features you can take a look here.