Elixir 是一種動態函數式語言,用於建置可擴充且可維護的應用程式。

Elixir 在 Erlang VM 上執行,以建立低延遲、分散式且容錯的系統而聞名。這些功能和 Elixir 工具讓開發人員可以在各種產業的許多領域中發揮生產力,例如網頁開發、嵌入式軟體、機器學習、資料管道和多媒體處理。

以下是簡要說明

iex> "Elixir" |> String.graphemes() |> Enum.frequencies()
%{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}

查看我們的 入門指南學習頁面,開始使用 Elixir。或繼續往下捲動,以取得平台、語言和工具的概觀。

在生產環境中使用 Elixir 的公司

查看更多案例 →

平台功能

可擴充性

所有 Elixir 程式碼都在輕量級執行緒 (稱為處理程序) 中執行,這些處理程序是獨立的,並透過訊息交換資訊

current_process = self()

# Spawn an Elixir process (not an operating system one!)
spawn_link(fn ->
  send(current_process, {:msg, "hello world"})
end)

# Block until the message is received
receive do
  {:msg, contents} -> IO.puts(contents)
end

由於其輕量級特性,您可以在同一台機器上同時執行數十萬個處理程序,有效率地使用所有機器資源 (垂直擴充)。處理程序也可以與執行在不同機器上的其他處理程序通訊,以協調多個節點上的工作 (水平擴充)。

Numerical Elixir 等專案結合後,Elixir 可擴充至多個核心、叢集和 GPU。

容錯性

關於生產環境中軟體的不可避免的事實是:事情會出錯。當我們考慮網路、檔案系統和其他第三方資源時,情況更是如此。

為了對故障做出反應,Elixir 監督程式會說明當事情出錯時如何重新啟動系統的某些部分,並回到保證會運作的已知初始狀態

children = [
  TCP.Pool,
  {TCP.Acceptor, port: 4040}
]

Supervisor.start_link(children, strategy: :one_for_one)

容錯性和訊息傳遞的結合,讓 Elixir 成為事件驅動系統和強健架構的絕佳選擇。例如 Nerves 等架構建立在這個基礎上,以利於可靠的嵌入式/IoT 系統的生產開發。

語言功能

函數式程式設計

函數式程式設計推廣一種編碼風格,可協助開發人員撰寫簡潔、精確且可維護的程式碼。例如,模式比對讓我們能夠優雅地比對並斷言特定條件,以便執行某些程式碼

def drive(%User{age: age}) when age >= 16 do
  # Code that drives a car
end

drive(User.get("John Doe"))
#=> Fails if the user is under 16

Elixir 仰賴這些功能來確保您的軟體在預期的限制下運作。如果沒有,別擔心,監督程式會支援您!

可擴充性和 DSL

Elixir 的設計具備可擴充性,讓開發人員可以自然地將語言擴充至特定領域,以提高其生產力。

舉例來說,讓我們使用 Elixir 的測試架構 ExUnit 撰寫一個簡單的測試案例

defmodule MathTest do
  use ExUnit.Case, async: true

  test "can add two numbers" do
    assert 1 + 1 == 2
  end
end

async: true 選項允許 test 並行執行,使用盡可能多的 CPU 核心,而 assert 功能可以內省您的程式碼,在發生故障時提供出色的報告。

其他範例包括使用 Elixir 編寫 SQL 查詢將 Elixir 的子集編譯到 GPU 等。

工具功能

不斷成長的生態系統

Elixir 內建許多工具,可簡化開發流程。Mix 是建置工具,可讓您輕鬆建立專案、管理任務、執行測試等。

$ mix new my_app
$ cd my_app
$ mix test
.

Finished in 0.04 seconds (0.04s on load, 0.00s on tests)
1 test, 0 failures

Mix 也與 Hex 套件管理員 整合,用於依賴性管理,並為整個生態系統主機文件

互動式開發

IEx(Elixir 的互動式殼層) 等工具,利用語言和平台提供自動完成、除錯工具、程式碼重新載入,以及格式良好的文件。

$ iex
Interactive Elixir - press Ctrl+C to exit (type h() ENTER for help)
iex> h String.trim           # Prints the documentation
iex> i "Hello, World"        # Prints information about a data type
iex> break! String.trim/1    # Sets a breakpoint
iex> recompile               # Recompiles the current project

Livebook 等程式碼筆記本,讓您能直接從瀏覽器與 Elixir 互動,包括支援繪圖、流程圖、資料表、機器學習等更多功能!

與 Erlang 相容

Elixir 在 Erlang VM 上執行,讓開發人員能完全存取 Erlang 的生態系統,像 WhatsAppKlarna 等公司就使用它來建置分散式、容錯應用程式。Elixir 程式設計師可以呼叫任何 Erlang 函式,且無執行時間成本。

iex> :crypto.hash(:sha256, "Using crypto from Erlang OTP")
<<192, 223, 75, 115, ...>>

若要進一步了解 Elixir,請查看我們的 入門指南

© 2012–2024 The Elixir Team。
Elixir 和 Elixir 商標是 The Elixir Team 的註冊商標