Elixir 是一种动态、函数式编程语言,用于构建可扩展和可维护的应用程序。

Elixir 运行在 Erlang VM 上,Erlang VM 以创建低延迟、分布式和容错系统而闻名。这些功能和 Elixir 工具使开发人员能够在多个领域(如 Web 开发、嵌入式软件、机器学习、数据管道和多媒体处理)以及广泛的行业中提高效率。

一窥究竟

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,建立在这个基础之上,使可靠的嵌入式/物联网系统的开发更高效。

语言功能

函数式编程

函数式编程提倡一种编码风格,帮助开发人员编写简洁、紧凑和可维护的代码。例如,模式匹配使我们能够优雅地匹配和断言某些代码执行的特定条件。

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 的交互式 shell) 这样的工具利用语言和平台提供自动完成功能、调试工具、代码重新加载以及格式良好的文档。

$ 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 的生态系统,该生态系统被 WhatsApp、Klarna 等公司用于构建分布式、容错应用程序。Elixir 程序员可以在没有运行时成本的情况下调用任何 Erlang 函数。

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

要了解有关 Elixir 的更多信息,请查看我们的 入门指南

© 2012–2024 Elixir 团队。
Elixir 和 Elixir 徽标是 Elixir 团队的注册商标