函数式编程语言-Elixir
2014-09-16 15:20:45 阿炯

Elixir是一种函数式编程语言,建立在Erlang虚拟机之上。它是一种动态语言,灵活的语法与宏支持,利用Erlang的能力来构建并发、分布式、容错应用程序与热代码升级。采用Apache协议授权。


Elixir is a functional, meta-programming aware language built on top of the Erlang VM. It is a dynamic language that focuses on tooling to leverage Erlang's abilities to build concurrent, distributed and fault-tolerant applications with hot code upgrades.


José Valim是Elixir语言的设计者。他创造该语言的目标是在维持与现有Erlang工具链及生态环境兼容性的同时,让人们可以在Erlang虚拟机上进行扩展性更好的、高生产率的开发。

特性
基于Erlang虚拟机(BEAM)。
与Erlang语言的无缝衔接;与其相互调用几乎无任何额外开销。
基于宏的元编程能力,语言的抽象语法树作为头等公民。
基于协议的多态实现。受到Clojure启发,协议提供了动态分派机制。但是不可混淆于多分派,因为Elixir协议在一个单一类型上进行分派。
完善的文档支持;一切均为表达式;模式匹配。
通过消息传递(演员模型)支持 Shared-nothing 并行事务。
强调利用递归和高阶函数的函数式编程胜过基于副作用和循环的命令式编程。
惰性求值,拥有诸如futures和promises一类的异步流数据类型。
Unicode支持,UTF-8字符串。

创建的背景

2013年,巴西人José Valim(何塞)又发明了一个编程语言Elixir,他本科在巴西圣保罗大学读电气工程,后来在意大利都灵理工大学拿到硕士学位。这个编程语言知道的人不太多,但是很多著名公司都在使用它,如:Spotify,PepsiCo,Discord,Square Enix,Adobe,Slack,Pinterest,Toyota。

Elixir特别适合开发分布式、可扩展的、高并发的应用程序。Discord的CTO在2017年的一篇文章中说道:Discord 就是 其早期采用者, Erlang VM 是我们想要构建的高并发实时系统的完美候选者,过去两年,系统中的并发用户数已达到近 500 万,每秒有数百万个事件......

如果让我从头再选择一次的话,我还会选择Elixir。而在Stackoverflow 2021年的报告中,在38种编程语言中,Elixir是收入排行第三的编程语言。

何塞在意大利时他遇到了现在的波兰妻子,然后搬到了波兰。在发明Elixir之前,何塞已经是著名Web框架Ruby on Rails团队的核心成员。可惜的是Ruby语言在并发,多核的表现不咋滴,没有解决并发问题的适当工具。这让他有点沮丧,他不断研究其他解决方案,直到有一天,它发现了Erlang虚拟机。

Erlang虚拟机已经解决了高并发和分布式的问题,为什么不把Ruby移植上去呢?主要是Ruby的思想和概念和Erlang格格不入,没办法的何塞最终决定:发明一门新的编程语言Elixir。在设计上,何塞借鉴了Erlang,Clojure和Ruby的思想。

Erlang :函数式思想、基础设施

Ruby:优雅的语法、标准库、命名方式

Clojure :基于协议的多态实现

大家可能觉得一个大牛发明一门新语言是很容易的,其实并非如此。何塞并不是科班出身,也缺乏编译器的知识,也得从头学词法分析,语法分析......他看了几本经典编译书籍如龙书,更关键的是阅读了Erlang、Ruby、JavaScript等语言的解析器源代码,然后才开始动手。即使如此,何塞依然步履维艰,他的第一个Elixir原型非常糟糕,就像迷失在了山洞中的原始人,到处探索。等到第一个版本发布,已经是两年以后了。


一门新语言出现以后,如果获得众人关注是最难的一步。在这一点上,何塞充分学习了Rails创始人DHH的营销能力。他开始走出去,在各种活动上宣传Elixir,接受各种采访介绍Elixir,写各种文章为Elixir造势。提到它就不能不提Web框架Phoenix。

他们像当年的Rails一样,录制了一个视频:在15分钟内克隆一个Twitter。这个视频引发了不小的关注度,成功地引发了对Elixir和Phoenix的讨论,吸引了更多人来使用Elixir。Elixir的关键点和其他编程语言不同,Elixir的process并不是操作系统的进程(Process)或者线程(Thread);其process是非常轻量级的,在单台服务器上可以几十万,甚至上百万个process。这也正是Erlang平台的优势所在!

所以发明人何塞说:Elixir非常适合开发一切运行在socket上应用!

上世纪90年代,写一段代码,放在那里什么也不做,两年以后,新的硬件就会让它的性能提升一倍。现在摩尔定律失效了,CPU走向了多核,系统走向了分布式。多核和分布式让编程变得非常麻烦,但是Elixir用函数式编程的不变性和Erlang平台正好解决了这两个问题。如果有类似的需求,强烈建议关注下这门独特的编程语言,它也许就是帮助你击败竞争对手的秘密武器。


最新版本:1.0
此版本更新内容如下:
功能增强
[Logger] 添加了 Logger.enable/1 和 Logger.disable/1

向后不兼容改进
[GenEvent] 不再支持 {:swap_handler, ...} 作为回调返回值
[List] List.unzip/2 已被移除

官方主页:http://elixir-lang.org/