Comment by alberth

16 hours ago

Elixir is great.

OT: I wish more funding & development effort went into BEAM itself on making it more performant.

Note: I’m not talking concurrency. I’m talking pure raw performance.

Seems like it’s been a one person show for over a decade on making it faster.

There are multiple people working on the JIT within the last 5-6 years. The WhatsApp folks also contribute meaningfully.

I suspect once the Erlang/OTP team squeezes all performance in the JIT, they will look into optimizing across modules, which will probably open up many new possibilities, but it requires rethinking some runtime primitives.

  • Hi Jose

    You’re an inspiration for many. Thank you.

    I’m curious to know what your top 3 hopes for BEAM itself are for the coming years (in any area that you think would make it better).

    • Thanks for the kind words and the nice question!

      1. The cross module optimizations I mentioned above 2. Have a WASM target for the runtime itself 3. Make it easier to ship single file executables with the whole VM

      But they are really “nice-to-have”s. I have been a happy user for 15+ years!

  • A few years ago, I was working on an interpreter implemented in elixir for a domain specific language. It was a pretty basic metacircular interpreter. It relied heavily on function signature dispatch. When I tried breaking up the massive “interpret” function across modules, performance tanked. I got it all back by using some macro shenanigans, but understandably the team did not like this.

    Knowing what I know now, I would’ve tried to push for a threaded interpreter to get rid of the runtime overhead of dispatching altogether. I don’t know if they’ve changed the architecture of that module much since I left :-)

It’s pretty hard to make things like math faster for real world use cases in a bytecode interpreter.

  • It's a JIT nowadays. Admittedly an extremely simple one, to minimize compile times and maintenance overhead.

    You can get substantial performance improvements by using guards though. See what Wings3D does with is_float() everywhere in hot numeric-heavy code.

  • i ran a quick experiment where instead of doing boxing the way its done in the beam currently, i used a different boxing (NaN strategy and there was a 10x speedup

    • oh, I didn't recognize your username here! It's been ages since I've seen you. Hope you'll be in Chicago in September.