文章浏览阅读47次。Elixir官网:http://elixir-lang.org/Elixir是一种函数式动态语言,用于构建可伸缩、易维护的应用程序。
Elixir 官方网站:
Elixir 是一种用于构建可扩展、可维护应用程序的函数式动态语言。
Elixir 基于 Erlang VM,它以运行低延迟、分布式、容错系统而闻名,并成功用于 Web 开发和嵌入式软件领域。
1. 平台特点 1.1 可扩展性
所有 Elixir 代码都在独立的轻量级线程中运行,这些线程通过消息相互通信:
parent = self()
# Spawns an Elixir process (not an operating system one!)
spawn_link(fn ->
send parent, {:msg, "hello world"}
end)
# Block until the message is received
receive do
{:msg, contents} -> IO.puts contents
end
1.2 容错
关于生产中运行的软件,有一个不可避免的事实:事情总是会出错,而网络、文件系统和其他第三方资源的问题会使问题变得更加复杂。
为了处理各种故障,Elixir 提供了主管 - 当出现问题时如何重新启动系统的各个部分,以回到已知正常工作的初始状态的描述:
import Supervisor.Spec
children = [
supervisor(TCP.Pool, []),
worker(TCP.Acceptor, [4040])
]
Supervisor.start_link(children, strategy: :one_for_one)
2. 语言特性 2.1 函数式编程
函数式编程改善了编码风格,帮助开发人员编写简短、快速且易于维护的代码。例如,模式匹配允许开发人员轻松构造数据并访问其内容:
%User{name: name, age: age} = User.get("John Doe")
name #=> "John Doe"
当你想要添加保护时,模式匹配允许我们优雅地匹配并声明某些代码执行的特定条件:
def serve_drinks(%User{age: age}) when age >= 21 do
# Code that serves drinks!
end
serve_drinks User.get("John Doe")
#=> Fails if the user is under 21
Elixir 高度依赖这些功能来确保您的软件在预期的限制范围内运行。如果没有,别担心,主管会处理好这件事。
2.2 可扩展性和领域特定语言 (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 选项允许测试并行运行,从而充分利用尽可能多的 CPU 核心,而断言可以自省您的代码,提供强大的故障报告功能。这些功能是使用 Elixir 宏构建的,因此可以添加作为语言本身一部分而存在的新构造。
3. 工具 3.1 发展中的生态系统
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 tests, 0 failures
Mix 还可以管理依赖项 - 这是通过与 Hex 包管理器集成实现的,它提供依赖项解析和远程包获取功能。
3.2 交互式开发
诸如 IEx(Elixir 的交互式 shell)之类的工具提供了语言和平台功能,例如自动完成、调试工具、代码重新加载和格式良好的文档:
$ iex
Interactive Elixir - press Ctrl+C to exit (type h() ENTER for help)
iex> c "my_file.ex" # Compiles a file
iex> t Enum # Prints types defined in the module Enum
iex> h IEx.pry # Prints the documentation for IEx pry functionality
3.3 Erlang 兼容性
Elixir 在 Erlang VM 上运行,让开发人员可以完全访问 Erlang 生态系统,Heroku、Whatsapp、Klarna、Basho 等公司也使用它来构建分布式容错应用程序。Elixir 程序员可以调用 Erlang 函数而无需任何运行时开销:
iex> :crypto.md5("Using crypto from Erlang OTP")
<<192,223,75,115,...>>