PragTob
How to make an Elixir library available to erlang users?
Hello Elixir friends,
I want to make one of my Elixir available/usable for our Erlang friends and be a “good BEAM citizen”. I was also told, that there isn’t really a good benchmarking library for Erlang so it seemed like a great idea.
Problem: I can’t figure out how to install Elixir libraries in Erlang. Threads like Writing a library for use in both Elixir and Erlang as well as the prominent Erlang/rebar3 usage on hex.pm made me think this was possible (although I always sort of wondered where it gets all the Elixir from)…
I setup a little test respository. However, benchee can not be found and neither can any other popular elixir hex package I can think of:
tobi@speedy ~/github/benchee_erlang $ rebar3 update
===> Updating package registry...
===> Writing registry to /home/tobi/.cache/rebar3/hex/default/registry
===> Generating package index...
===> Writing index to /home/tobi/.cache/rebar3/hex/default/packages.idx
tobi@speedy ~/github/benchee_erlang $ rebar3 compile
===> Package <<"benchee">> not found. Fetching registry updates and trying again...
===> Updating package registry...
===> Writing registry to /home/tobi/.cache/rebar3/hex/default/registry
===> Generating package index...
===> Writing index to /home/tobi/.cache/rebar3/hex/default/packages.idx
===> Package not found in registry: <<"benchee">>.
tobi@speedy ~/github/benchee_erlang $ rebar3 pkgs | grep poison
tobi@speedy ~/github/benchee_erlang $ rebar3 pkgs | grep phoenix
(btw. yes I have the rebar3_hex plugin installed but I think it does something else)
Adding benchee as a git dependency I get this error:
tobi@speedy ~/github/benchee_erlang $ rebar3 compile
===> Verifying dependencies...
===> Fetching benchee ({git,"git://github.com/PragTob/benchee.git"})
===> WARNING: It is recommended to use {branch, Name}, {tag, Tag} or {ref, Ref}, otherwise updating the dep may not work as expected.
===> Dependency failure: Application benchee not found at the top level of directory /home/tobi/github/benchee_erlang/_build/default/lib/benchee
It’s from this rebar3 issue - basically I don’t follow the standard rebar3/erlang project structure and yeah I’m an elixir project, so sure it doesn’t work.
So what do I do? Elixir and Erlang/rebar3 both use hex.pm and elixir people can use Erlang stuff but not the other way around? Do I just not know how?
How can I allow an Erlang project to use an Elixir library? Do they have to copy the files and compile them themselves to beam files? Do I setup a separate rebar3 package?
Sorry my erlang knowledge is also rather… improvable ![]()
I feel like (and hope) I’m really missing something so please feel free to point it out. Thank you in advance ![]()
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #hex
- #performance










First 10 of 15 Posts
idi527
A bit off-topic, but some erlang programmers would want to avoid using any elixir libs because elixir needs to include it’s standard library at runtime, so if someone wants their library to be used by all languages on beam, it might be better to write it in erlang. In your case though it probably doesn’t matter, since it’s a benchmarking library.
PragTob
Should they avoid it for that reason, then their loss
It’s also not used at run time, so there is no impact on the runtime release that gets distributed 
The library has a non trivial code base by now so I’m not gonna rewrite, just trying to be a good BEAM citizen.
josevalim
I believe you need something like rebar3_mix or rebar3_elixir for it to work. Try pinging t_slought/tristan or alisdair on elixir-lang IRC channel.
PragTob
Thanks, will do/try!
PragTob
Update: Thanks to @josevalim (
) I found rebar3_elixir_compile which seems to do what I want it to with the following configuration:
It fetches all dev dependencies atm and values other than the dev environment don’t seem to work. Will ask there. Seems to work now:
Thanks a lot!
If someone has other ideas/ways please still let me know
Crowdhailer
It might be time for a new thread on this but I am wonder what the resolution to this thread was. What is the best way to
a) use Elixir libs from an erlang project
b) structure an Elixir project so it is easy to use from erlang
PragTob
I think rebar3_elixir_compile is still the goto solution. Albeit no one ever responded to the issues I created but there have been some updates.
My test repo works some of the time - albeit I also needed to escriptize and I’m not too familiar with rebar3/escriptize so others might to a better job than me.
From my perspective for use cases such as benchee (i.e. you don’t need something at runtime but rather just a tool) it’s easiest/most reliable to just install elixir use the library and then call to erlang code from there. I’d be happy for a better solution though.
At Lambdadays I talked quickly with Michał and José and it sounded like it’d be nice to do something to make it easier and that it shouldn’t be that hard but also not a top priority right now.
Crowdhailer
Thanks for the test repo. I hope it is something that can be prioritised soon. I would really like to see the beam community as people like to call it become more cohesive
josevalim
Thanks @PragTob! I want to clarify that people should not expect the Elixir team to solve this. We already do all of the work to ensure you can use rebar/rebar3/make from Mix, the other direction is not quite up to us but rather to people using those other build tools. We will be glad to answer any questions or improve Elixir if necessary but it is up to the community to tackle the problem together.
tristan
rebar_mix GitHub - Supersonido/rebar_mix: rebar3 plugin for building Elixir dependencies with mix · GitHub is the newer solution that handles transitive deps.