Elixir Sample

Elixir是一种动态的功能语言,旨在用于构建可伸缩和可维护的应用程序.

Elixir利用了以运行低延迟,分布式和容错系统而著称的Erlang VM,同时也成功地用于Web开发和嵌入式软件领域.

要了解有关Elixir的更多信息,请查看我们的入门指南学习页面,以获取其他资源 . 或继续阅读以获取平台,语言和工具的概述.

Platform features

Scalability

所有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

in the same machine. 由于它们的轻量性质,在同一台计算机上运行成千上万个进程并不少见. 隔离允许独立地对进程进行垃圾回收,从而减少系统范围内的停顿,并尽可能高效地使用所有机器资源(垂直扩展).

进程还能够与同一网络中不同计算机上运行的其他进程进行通信. 这为分发提供了基础,允许开发人员跨多个节点协调工作(水平缩放).

Fault-tolerance

. 生产中运行的软件不可避免的事实是 . 当我们考虑网络,文件系统和其他第三方资源时,甚至更多.

为了应对故障,Elixir提供了主管,这些主管描述了在出现问题时如何重新启动系统的各个部分,并返回到可以保证正常工作的已知初始状态:

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

Supervisor.start_link(children, strategy: :one_for_one)

通过消息传递将可伸缩性,容错性和事件驱动的编程相结合,使Elixir成为反应式编程和体系结构的绝佳选择.

Language features

Functional programming

函数式编程促进了一种编码样式,该样式可以帮助开发人员编写简短,简洁且可维护的代码. 例如,模式匹配使开发人员可以轻松地分解数据并访问其内容:

%User{name: name, age: age} = User.get("John Doe")
name #=> "John Doe"

当与守卫混合使用时,模式匹配使我们能够优雅地匹配并声明某些条件以执行某些代码:

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高度依赖这些功能,以确保您的软件在预期的约束下运行. 如果不是这样,请不要担心,主管会帮您!

Extensibility and DSLs

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宏构建的,因此可以添加新的构造,就好像它们是语言本身的一部分一样.

Tooling features

A growing ecosystem

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软件包管理器集成,后者执行依赖性解析,获取远程软件包并托管整个生态系统的文档 .

Interactive development

诸如IEx(Elixir的交互式外壳)之类的工具能够利用语言和平台的许多方面来提供自动完成,调试工具,代码重新加载以及格式精美的文档:

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

Erlang compatible

Elixir在Erlang VM上运行,使开发人员可以完全访问Erlang的生态系统, HerokuWhatsAppKlarna等公司使用它来构建分布式的,容错的应用程序. Elixir程序员可以调用任何Erlang函数,而无需花费运行时间:

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

要了解有关Elixir的更多信息,请查看我们的入门指南 . 我们还提供在线文档针对Erlang开发人员速成班 .

by  ICOPY.SITE