Il codice Elixir viene eseguito sulla macchina virtuale BEAM. BEAM fa parte del sistema di runtime di Erlang. Essendo ispirato a Erlang e condividendone l'ambiente di esecuzione, Elixir offre un'ottima interoperabilità con le librerie Erlang. Questo significa che gli sviluppatori Elixir possono usare le librerie Erlang all'interno del proprio codice Elixir. Anzi, nella comunità Elixir è scoraggiato scrivere librerie Elixir per funzionalità già fornite dalle librerie Erlang.
Di conseguenza, alcune funzionalità, come le operazioni matematiche o le funzioni per i timer, sono disponibili in Elixir solo tramite Erlang.
Questo stretto rapporto tra Elixir e Erlang significa che, per diventare uno sviluppatore Elixir esperto, potresti voler dedicare un po' di tempo a imparare la sintassi di base di Erlang.
La libreria standard di Erlang è disponibile per l'uso nel nostro codice Elixir senza bisogno di passaggi aggiuntivi.
Le funzioni Erlang si possono chiamare nello stesso modo in cui chiamiamo le funzioni Elixir, con una piccola differenza. I nomi dei moduli Erlang sono atomi in snake_case. Ad esempio, per chiamare la funzione pi/0 di Erlang dal modulo math, si scriverebbe:
:math.pi()
# => 3.141592653589793
I moduli Erlang più usati forniscono funzionalità che mancano nella libreria standard di Elixir. Sono:
timer, che fornisce funzioni come sleep/1, send_after/2 e send_interval/2.rand, che fornisce funzioni come uniform/0, normal/0 e seed/2.:io_lib.format/2, che fornisce la formattazione di stringhe in stile C (usando sequenze di controllo).math, che fornisce funzioni matematiche come sin/1, cos/1, log2/1, log10/1, pow/2 e altre ancora.queue, che fornisce una struttura dati di tipo coda.crypto, che fornisce funzioni crittografiche.zip, che fornisce funzioni per lavorare con gli archivi zip.calendar, che fornisce funzioni per lavorare con date e orari, come iso_week_number/1. Per passare una struct Date, Time o NaiveDateTime a una delle funzioni Erlang, bisogna convertirla nel formato Erlang con una funzione to_erl del modulo corrispondente.Per scoprire la libreria standard di Erlang, esplora il manuale di riferimento STDLIB.
L'interoperabilità di Elixir con le librerie Erlang non si limita alla libreria standard di Erlang. Qualsiasi libreria Erlang può essere usata nel codice Elixir.