O código Elixir corre na máquina virtual BEAM. A BEAM faz parte do sistema de execução do Erlang. Por ter sido inspirado pelo Erlang e por partilhar o seu ambiente de execução, o Elixir oferece uma excelente interoperabilidade com as bibliotecas do Erlang. Isto significa que os programadores de Elixir podem usar bibliotecas do Erlang a partir do seu código Elixir. De facto, na comunidade Elixir, é desencorajado escrever bibliotecas Elixir para funcionalidades que as bibliotecas do Erlang já oferecem.
Por isso, certas funcionalidades, como operações matemáticas ou funções de temporização, só estão disponíveis no Elixir através do Erlang.
Esta relação estreita entre o Elixir e o Erlang faz com que, para te tornares um programador de Elixir proficiente, valha a pena investires algum tempo a aprender a sintaxe básica do Erlang.
A biblioteca padrão do Erlang está disponível para ser usada no nosso código Elixir sem ser preciso qualquer passo adicional.
As funções do Erlang podem ser chamadas da mesma forma que chamamos as funções do Elixir, com uma pequena diferença. Os nomes dos módulos do Erlang são átomos em snake_case. Por exemplo, para chamar a função pi/0 do módulo math do Erlang, escreverias:
:math.pi()
# => 3.141592653589793
Os módulos do Erlang mais usados fornecem funcionalidades que a biblioteca padrão do Elixir não tem. São eles:
timer, que fornece funções como sleep/1, send_after/2 e send_interval/2.rand, que fornece funções como uniform/0, normal/0 e seed/2.:io_lib.format/2, que fornece formatação de strings ao estilo de C (usando sequências de controlo).math, que fornece funções matemáticas como sin/1, cos/1, log2/1, log10/1, pow/2 e muitas mais.queue, que fornece uma estrutura de dados do tipo fila.crypto, que fornece funções criptográficas.zip, que fornece funções para trabalhar com arquivos zip.calendar, que fornece funções para trabalhar com datas e horas, como iso_week_number/1. Para passar uma estrutura Date, Time ou NaiveDateTime a uma das funções do Erlang, é preciso convertê-la para o formato do Erlang com uma função to_erl do módulo correspondente.Para descobrires a biblioteca padrão do Erlang, explora o Manual de Referência da STDLIB.
A interoperabilidade do Elixir com as bibliotecas do Erlang não se limita à biblioteca padrão do Erlang. Qualquer biblioteca do Erlang pode ser usada no código Elixir.