کد Elixir در ماشین مجازی BEAM اجرا میشود. BEAM بخشی از سیستم زمان اجرای Erlang است. Elixir که از Erlang الهام گرفته و محیط اجرای خود را با آن سهیم است، همکاریپذیری خوبی با کتابخانههای Erlang فراهم میکند. این یعنی توسعهدهندگان Elixir میتوانند از کتابخانههای Erlang در کد Elixir خود استفاده کنند. در واقع، جامعهی Elixir توصیه نمیکند که برای قابلیتهایی که کتابخانههای Erlang از قبل فراهم کردهاند، کتابخانهی Elixir بنویسید.
در نتیجه، برخی قابلیتها، مانند عملیات ریاضی یا توابع زمانسنجی، در Elixir فقط از طریق Erlang در دسترساند.
این رابطهی نزدیک میان Elixir و Erlang یعنی اگر بخواهید به توسعهدهندهای ماهر در Elixir تبدیل شوید، بهتر است زمانی را صرف یادگیری نحوهی نگارش پایهی Erlang کنید.
کتابخانهی استاندارد Erlang بدون نیاز به هیچ مرحلهی اضافهای در کد Elixir ما قابل استفاده است.
توابع Erlang را میتوان به همان روشی فراخوانی کرد که توابع Elixir را فراخوانی میکنیم، با یک تفاوت کوچک. اسم ماژولهای Erlang اتمهایی به سبک snake_case هستند. برای مثال، برای فراخوانی تابع pi/0 از ماژول math، مینویسیم:
:math.pi()
# => 3.141592653589793
پرکاربردترین ماژولهای Erlang قابلیتهایی را فراهم میکنند که در کتابخانهی استاندارد Elixir وجود ندارد. اینها عبارتاند از:
timer که توابعی مانند sleep/1، send_after/2 و send_interval/2 را فراهم میکند.rand که توابعی مانند uniform/0، normal/0 و seed/2 را فراهم میکند.:io_lib.format/2 که قالببندی رشته به سبک C (با استفاده از دنبالههای کنترلی) را فراهم میکند.math که توابع ریاضی مانند sin/1، cos/1، log2/1، log10/1، pow/2 و موارد دیگر را فراهم میکند.queue که ساختار دادهی صف را فراهم میکند.crypto که توابع رمزنگاری را فراهم میکند.zip که توابعی برای کار با بایگانیهای zip فراهم میکند.calendar که توابعی برای کار با تاریخ و زمان، مانند iso_week_number/1، فراهم میکند. برای فرستادن یک ساختار Date، Time یا NaiveDateTime به یکی از توابع Erlang، باید آن را با تابع to_erl از ماژول مربوطه به قالب Erlang تبدیل کرد.برای آشنایی با کتابخانهی استاندارد Erlang، نگاهی به مرجع STDLIB بیندازید.
همکاریپذیری Elixir با کتابخانههای Erlang محدود به کتابخانهی استاندارد Erlang نیست. هر کتابخانهی Erlang را میتوان در کد Elixir به کار برد.