Le code Elixir s'exécute dans la machine virtuelle BEAM. BEAM fait partie du système d'exécution d'Erlang. Comme Elixir s'inspire d'Erlang et partage son environnement d'exécution, il offre une excellente interopérabilité avec les bibliothèques Erlang. Cela signifie que les développeurs Elixir peuvent utiliser les bibliothèques Erlang directement depuis leur code Elixir. En effet, la communauté Elixir décourage l'écriture de bibliothèques Elixir pour des fonctionnalités déjà fournies par les bibliothèques Erlang.
Par conséquent, certaines fonctionnalités, comme les opérations mathématiques ou les fonctions de minuterie, ne sont disponibles en Elixir que via Erlang.
Cette relation étroite entre Elixir et Erlang signifie que, pour devenir un développeur Elixir confirmé, tu as tout intérêt à consacrer un peu de temps à l'apprentissage de la syntaxe de base d'Erlang.
La bibliothèque standard d'Erlang est directement utilisable dans notre code Elixir, sans aucune étape supplémentaire.
On peut appeler les fonctions Erlang de la même manière que les fonctions Elixir, à une petite différence près. Les noms de modules Erlang sont des atomes en snake_case. Par exemple, pour appeler la fonction Erlang pi/0 du module math, on écrirait :
:math.pi()
# => 3.141592653589793
Les modules Erlang les plus utilisés apportent des fonctionnalités qui manquent à la bibliothèque standard d'Elixir. En voici quelques-uns :
timer, qui fournit des fonctions telles que sleep/1, send_after/2 et send_interval/2.rand, qui fournit des fonctions telles que uniform/0, normal/0 et seed/2.:io_lib.format/2, qui permet de formater des strings à la manière du C (à l'aide de séquences de contrôle).math, qui fournit des fonctions mathématiques telles que sin/1, cos/1, log2/1, log10/1, pow/2, entre autres.queue, qui fournit une structure de données de type file.crypto, qui fournit des fonctions cryptographiques.zip, qui fournit des fonctions pour manipuler des archives zip.calendar, qui fournit des fonctions pour manipuler les dates et les heures, comme iso_week_number/1. Pour passer une structure Date, Time ou NaiveDateTime à l'une des fonctions Erlang, il faut la convertir au format Erlang avec une fonction to_erl du module correspondant.Pour découvrir la bibliothèque standard d'Erlang, explore le manuel de référence STDLIB.
L'interopérabilité d'Elixir avec les bibliothèques Erlang ne se limite pas à la bibliothèque standard d'Erlang. N'importe quelle bibliothèque Erlang peut être utilisée dans du code Elixir.