O código Elixir roda na máquina virtual BEAM. O BEAM faz parte do sistema de execução do Erlang. Por ter sido inspirado no Erlang e compartilhar o seu ambiente de execução, o Elixir oferece uma ótima interoperabilidade com bibliotecas Erlang. Isso significa que os desenvolvedores Elixir podem usar bibliotecas Erlang dentro do próprio código Elixir. Na verdade, escrever bibliotecas Elixir para funcionalidades que as bibliotecas Erlang já oferecem é desencorajado na comunidade Elixir.
Por isso, certas funcionalidades, como operações matemáticas ou funções de temporizador, só estão disponíveis no Elixir por meio do Erlang.
Essa relação próxima entre Elixir e Erlang significa que, para se tornar um desenvolvedor Elixir proficiente, talvez você queira investir algum tempo aprendendo a sintaxe básica do Erlang.
A biblioteca padrão do Erlang está disponível para uso no nosso código Elixir sem nenhum passo extra.
As funções Erlang podem ser chamadas da mesma forma que chamamos funções Elixir, com uma pequena diferença. Os nomes dos módulos Erlang são átomos em snake_case. Por exemplo, para chamar a função pi/0 do módulo math do Erlang, você escreveria:
:math.pi()
# => 3.141592653589793
Os módulos Erlang mais usados oferecem funcionalidades que faltam na biblioteca padrão do Elixir. 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 string no estilo C (usando sequências de controle).math, que fornece funções matemáticas como sin/1, cos/1, log2/1, log10/1, pow/2 e muitas outras.queue, que fornece uma estrutura de dados de 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 struct Date, Time ou NaiveDateTime para uma das funções Erlang, ela precisa ser convertida para o formato Erlang com uma função to_erl do módulo correspondente.Para conhecer a biblioteca padrão do Erlang, explore o Manual de Referência do STDLIB.
A interoperabilidade do Elixir com bibliotecas Erlang não se limita à biblioteca padrão do Erlang. Qualquer biblioteca Erlang pode ser usada no código Elixir.