I'd also recommend having a look at the Zig library for Elixir. For simple stuff, you can just inline, but support for pretty complex setups too.
Also comes with a built-in BEAM allocator so the runtime properly reports NIF memory consumption.
Also comes with a built-in BEAM allocator so the runtime properly reports NIF memory consumption.
the big advantage is that it will automatically box/unbox to/from c values for you and generate sane error messages (which rustler does not, last i checked) when you pass incompatible terms in to the function.
on the other hand rustler lets you precompile (which is coming in a future version of Zigler)