tomazzlender

tomazzlender

I tried out Rustler and it is amazing when I need to define NIFs at the compile time.

I’m experimenting with a use case where it would be useful to define a NIF at a run time.

Imagine being in an IEx shell where you are able to define a function at the runtime and use it right after.

I wonder how I could do something similar for nifs. Let’s imagine that I have the following Rust code that I want to compile and load at the runtime of BEAM

  fn add(a: i64, b: i64) -> i64 {
    a + b
  }

and use it like

defmodule AdditionWithRust do
  def add(a, b), do
     add_function = """
     fn add(a: i64, b: i64) -> i64 {
       a + b
     }
    """

    RustOnRuntime.apply(add_function, a, b)
end
"""

Where RustOnRuntime is a fictional module that does some magic.

I would copy paste this to IEx and I would be able to use the function normally.

It’s OK to assume I have a fixed number of Rust libraries that are defined at the compile time, and only those library functions can be used, no new can be loaded.

I suppose this is quite a complex question. I suppose that at the bottom of it there is probably a question if it is even possible to compile and load erlang nifs (of any kind not just Rust) at the run time..

Any pointers what things to consider or where to start would be much appreciated.

Showing Posts 1 to 3

arcadian

arcadian

I’m not a Rust fan - prefer C++ - but I’ll tell you what I know. If you update the shared library, and the NIF supports reloading (see ERL_NIF_INIT), then there is no reason that you shouldn’t be able to update your NIF whenever you want with new functionality. Updating the shared library for my setup is as easy as just running gmake in the right directory.

Imagine being in an IEx shell where you are able to define a function at the runtime and use it right after.

Yeah, this is what I should be doing, but I haven’t set the appropriate reload functions. Still, though my development cycle is pretty close - edit the c++ code in one window, then restart iex in another (which compiles my nif via gmake) and then run my test at the iex command line.

BTW I proposed a dedicated Nif subforum here but couldn’t get any momentum so my plan is to maintain some pages of Nif-related resources somewhere else, either github or my own site.

tomazzlender

tomazzlender OP

That’s a great pointer @arcadian, thanks! I’ll look into ERL_NIF_INIT. Your answer also helped me find the Rust equivalent.

lkuty

lkuty

That would be great :slight_smile:

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New

Other Trending Topics Top

budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews