Elixir 程式碼在 BEAM 虛擬機器 上執行。BEAM 是 Erlang 執行階段系統的一部分。Elixir 受到 Erlang 啟發,又與它共用執行環境,因此和 Erlang 函式庫之間有良好的互通性。也就是說,Elixir 開發者可以在自己的 Elixir 程式碼裡使用 Erlang 函式庫。事實上,針對 Erlang 函式庫已經提供的功能另外撰寫 Elixir 函式庫,在 Elixir 社群裡是不被鼓勵的。
因此,某些功能(例如數學運算或計時器函式)在 Elixir 中只能透過 Erlang 使用。
Elixir 與 Erlang 之間如此緊密的關係,意味著若想成為熟練的 Elixir 開發者,你可能會想花點時間學習 Erlang 的基本語法。
在我們的 Elixir 程式碼裡可以直接使用 Erlang 的標準函式庫,不需要任何額外的步驟。
呼叫 Erlang 函式的方式和呼叫 Elixir 函式一樣,只有一個小小的差別。Erlang 的模組名稱是snake_case的 atom。舉例來說,若要從math模組呼叫 Erlang 的pi/0函式,可以這樣寫:
: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 的程式碼中使用。