“不要咖啡,不要大象,不要蟒蛇,不要红宝石,只要万金油。””
Elixir
美式发音 [ɪˈlɪksɚ] 读音
中文翻译有 灵丹妙药、圣水、万金油
我并不知道, Elixir
是不是未来的编程语言,我也不是语言的盲目推崇者,每门语言都有自己适合的领域和使用的人群,有自己的劣势和优势。作为编程语言的使用者和学习者,多了解一门语言,不是一件坏事。
Elixir 简介
Elixir
是一种面向并发的函数式编程语言,运行在工业级、高性能、分布式的 Erlang
虚拟机上。
标签 函数式编程、分布式、热代码更新、并发
Elixir
是跑在上 Erlang
虚拟机上的一门语言,创始人是 ruby
社区的主要贡献者之一。所以 Elixir
吸收了很多 ruby
的特性。
Erlang
是电信设备制造商爱立信旗下实验室产出的一门语言。目的是创造一种可以应对大规模并发活动的编程语言和运行环境。
如果,我们要开发 web 应用。Elixir
有对应的 web 框架 Phoenix 。Phoenix
提供了完整的生态工具链。从系统设计、开发、测试、到部署,能够快速的构建产品原型。写一次应用就知道有多舒爽了,像贴心的管家,为你准备好了一切。
Elixir 介绍
Elixir
是一个基于 Erlang
虚拟机的函数式、面向并行的通用编程语言。Elixir
以 Erlang
为基础,支持分布式、高容错、实时应用程序的开发,同时亦对其进行扩展使之借助宏实现元编程,并通过协议支持多态。
José Valim
是 Elixir
语言的设计者。他创造该语言的目标是在维持与现有 Erlang
工具链及生态环境兼容性的同时,让人们可以在 Erlang
虚拟机上进行扩展性更好的、高生产率的开发。Elixir
是编写高度并行处理,高可靠性应用的极佳选择。
Elixir主要特性
- 基于
Erlang
虚拟机(BEAM)之上。 - 与
Erlang
语言的无缝衔接,与Erlang
的互调几乎无任何额外开销。 - 基于宏的元编程能力,语言的抽象语法树作为头等公民。
- 基于协议的多态实现。(启发自
Clojure
) - 通过消息传递(参与者模式)支持
Shared-nothing
并行事务。 - 强调利用递归和高阶函数的函数式编程胜过基于副作用和循环的命令式编程。
- 一切均为表达式。
- 惰性求值,拥有诸如
futures
和promises
一类的异步流数据类型。 - 模式匹配。
Unicode
支持,UTF-8
字符串。
Actor并发
Elixir
使用 actor
并发模型,actor
是一个无依赖的进程,它不与其他进程共享任何东西。你可以spawn
新进程,向它发消息,并且用 receive
接收消息,仅此而已。这里谈论的 Elixir
进程并不是操作系统的原生进程。它们既慢又笨重。相反,Elixir
使用 Erlang
的进程。这些进程将在所有的处理器中运行(像原生进程一样),但是它们的开销非常小,在普通的机器里创建数十万个 Elixir
进程轻而易举。
OTP
OTP
是 Open Telecom Platform
的缩写,是爱立信公司开发的开放电信应用平台,这是一个很强大并且很通用的框架,它能帮我们编写大型的、容错的,分布式的系统。
OTP
经常被渲染成解决所有高可用分布式应用困境的法宝。其实未必,但是用它的确可以解决许多原本你需要自己解决的问题,比如服务发现、故障检测与管理、热代码交换和服务器结构安排等。OTP
这个名字主要由于历史原因沿用下来,最初它被用来建立电话交换机,这些设备具有的特性也正是我们希望所有大型在线应用所具备的特性,所以 OTP
现在是一个通用工具,用于开发和管理大型系统。
我们每学一样东西都要把握它的中心思想,OTP
的中心思想就是把程序的通用部分和业务部分切开,我帮你把通用部分做好,你做你的业务逻辑就行了。如果你看过一些分布式系统,最火的应该是分布式存储系统了,像``Amazon的
Dynamo、
Google的
Bigtable、
LiveJournal的
memcache等,就知道保证分布式系统的容错能力、数据一致性、请求高并发性是非常困难的。但是他们所用的算法都非常固定,当你去实现另一个分布式系统时,很可能就是参考他们的算法。然后一些技术功底不够的程序员就想,要是能把这些基础的设施都做好,并且提供插件扩展,那多好啊,这样当我想写个分布式数据库的时候就能跟写普通数据库一样简单了。没错,
OTP` 就是帮你干那些又脏又累的活。
OTP
实际上是一个包,其中包括了 Erlang
、分布式数据库Mnesia和不计其数的库文件,主要如下:
- 一个Erlang直译器
- 一个Erlang编译器
- 服务器之间的通信协定
- Corba Object Request Broker
- 一个统计分析工具,名为Dialyzer
- 一个分布式数据库服务器,名为Mnesia
- 许多软件库
Elixir一直在使用 OTP
,包括 mix
、Elixir
编译器,甚至问题跟踪系统都符合 OTP
约定。
扩展阅读
参考
开始
英文官网