Elixir官网:http://elixir-lang.org/

Elixir是一种函数式动态语言,用于构建可伸缩、易维护的应用程序。

Elixir是基于Erlang VM的,其广为人知的特点是运行低延时、分布式、可容错的系统,并成功用于Web开发与嵌入式软件领域。

1. 平台特性

1.1 可伸缩

所有Elixir代码运行于相互隔离的轻量级线程中,相互间通过message通信:

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提供了supervisor - 描述当事情变得扭曲时如何重启你的系统的某些部分,返回已知的能保证正常运行的初始状态:

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"

当你想加入guard时,模式匹配允许我们优雅的匹配与声明某些代码执行的特定条件:

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强烈依赖那些特性,来确保你的软件运行于预期的约束下。如果没有,也别担心,supervisors会帮你擦屁股。

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核,同时断言函数可以内省(introspect)你的代码,提供失败情况下的强大报告。那些特性是用Elixir的宏来构建的,让其可以添加新的结构并作为语言本身的一部分存在。

3. 工具

3.1 发展中的生态系统

Elixir发布了整套工具来简化开发。Mix是一套build工具,它让你很简单的就能创建项目、管理任务、运行测试以及更多:

$ 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,...>>

基于Erlang VM的函数式编程语言Elixir的更多相关文章

  1. 函数式编程语言(functional language)

    内容根据百度词条整理! 转载请声明来源:https://baike.baidu.com/item/%E5%87%BD%E6%95%B0%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8 ...

  2. 函数式编程语言(Fuction Program Language)

    一.什么是函数式编程语言 函数式编程语言(functional progarm language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型. ...

  3. 函数式编程语言(Functional Program Language)

    (一) 什么是函数编程语言 简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论. 是一种编程典范, ...

  4. Linux下基于Erlang的高并发TCP连接压力实验

    1.实验环境: 联想小型机: 操作系统:RedHat Enterprise LinuxServer release6.4(Santiago) 内核版本号:Linux server1 2.6.32-35 ...

  5. Functional language(函数式编程语言)初步了解

    对于函数式语言并不太了解,查询了百度.博客.知乎等做了以下总结. What 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分 ...

  6. Frege-基于JVM的类Haskell纯函数式编程语言

    Frege是一门受Haskell语言启示而设计的纯函数式编程语言.Frege程序会被编译为Java,并执行于JVM上.它与Haskell是如此的类似.以至于有人称它为JVM上的Haskell.取Fre ...

  7. swift是面向对象、面向协议、高阶类型、灵活扩展、函数式编程语言

    swift是面向对象.面向协议.高阶类型.灵活扩展.函数式编程语言

  8. 【AMAD】coconut -- 简单,优雅,pythonic的函数式编程语言

    动机 简介 个人评分 动机 作者的话: 我喜欢函数式编程,我认为函数式编程提供了一个更自然的方式来思考问题,并且代码也更加优雅,易读.不过如果你看过前20个最受欢迎的编程语言,你会发现没有一个式函数式 ...

  9. 函数式编程语言LISP,python,haskell,clojure

    说说我自己的背景吧,我是个半吊子的程序员,做任何事情喜欢比较了解然后再尝试,我接触过很多语言,大多数都把它当成工具来使用 我现在的工作大部分主要在于数据挖掘与机器学习方面,也学习web开发,我第一个拿 ...

随机推荐

  1. 爱上MVC~为CheckBoxFor和RadioButtonFor加个扩展方法吧(希望MVC5把这方法收纳——呵呵)

    回到目录 说在前 我都是喜欢把问题复杂化,还有总是喜欢把问题简单化,偷懒化,这也需就是一个程序员的追求吧,呵呵. 我不太喜欢重复的东西,当你看到页面上有一个以上相同的代码时,那可以说,你的代码有重构的 ...

  2. Java的String字符串内容总结

    String--字符串 获取字符串的长度 使用Sring类的length()方法可获取字符串对象的长度,例: str.length(); str代表指定的字符串对象;返回值为返回指定字符串的长度.例: ...

  3. Android 实现应用升级方案(暨第三方自动升级服务无法使用后的解决方案)

    第三方推送升级服务不再靠谱: 以前在做Android开发的时候,在应用升级方面都是使用的第三方推送升级服务,但是目前因为一些非技术性的问题,一些第三方厂商不再提供自动升级服务,比如友盟,那么当第三方推 ...

  4. JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数

    第二题 已知有十六支男子足球队参加2008 北京奥运会.写一个程序,把这16 支球队随机分为4 个组.采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚 ...

  5. andriod adt和andriod sdk

    今天搭建appium的环境,没有太明白andriod adt和andriod sdk分别是什么东西,经过与开发沟通,大致了解如下,这里记录一下,免得过几天就搞忘了. andriod adt是一个插件, ...

  6. 处于同一个域中的两台Sql server 实例无法连接

    处于同一个域中的两台Sql server 实例无法连接,报的错误信息如下: A network-related or instance-specific error occurred while es ...

  7. 最简单的SVN环境搭建过程

    本文简单描述最简单的SVN环境搭建过程 搭建环境:windows (个人验证了windows2003,windows xp) 使用软件:Setup-Subversion-1.6.17  //Serve ...

  8. 用javascript动态创建并提交表单form,表格table

    <script> //helper function to create the formfunction getNewSubmitForm(){ var submitForm = doc ...

  9. 一种利用 Cumulative Penalty 训练 L1 正则 Log-linear 模型的随机梯度下降法

    Log-Linear 模型(也叫做最大熵模型)是 NLP 领域中使用最为广泛的模型之一,其训练常采用最大似然准则,且为防止过拟合,往往在目标函数中加入(可以产生稀疏性的) L1 正则.但对于这种带 L ...

  10. CSS 魔法系列:纯 CSS 绘制图形(各种形状的钻石)

    我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...