动态函数式语言 - Elixir

一直在找一种具有以下四种特性的编程语言

  • 函数式 Functional
    没有副作用的函数式编程才能从语言层面更好地解决 concurrency 问题,支持高并发、分布式,易于横向扩展

  • 动态 Dynamic
    动态语言,天然支持热更新,适合网络服务的升级

  • 宏 Macro
    自动生成代码,像 Lisp 那样的宏支持,代码数据融合

  • 好用的工具和生态
    特别是有一个好用的 web 框架,免除掉很多重复性工作,提高生产力;同时也有一个大家遵守的规范,代码容易维护和交流。例如 Rails、Django 还有 Meteor 等

其实还有一点就是不要面向对象,但是强调了函数式就自然暗含了这层意思。另外对数据库友好、容易测试也很重要,但是这些也都包含在好用的工具和生态里了。最后最好语法简练灵活等。

一句话: 一门适合网络应用编程的动态函数式语言

有了以上特性,我认为这样的语言就值得投入时间精力学习,虽然它在流行度上可能很难比肩主流的面向对象语言,但是一定会比目前流行的其他函数式语言,例如 Closure、Scala 等更有市场。

没有找到之前,就先用着 JavaScript。JavaScript 有很多它自己的优点,最厉害的就是生态强大。但是我寻找的这种语言和 JavaScript 解决的不是一类问题。我追求的是能像解数学函数那样来解决编程问题,程序和数据统一,同样的输入输出必须也一样,这样就会天然地支持并行计算;最好有好的语法糖来优雅地解决问题,这样写起来才更畅快。

Haskell 我曾经用过一段时间,用来处理一些科学数据,但是它是静态的,制作网站后端的框架也不够强大,比较适合学习函数式编程的概念和应该在学术上,不是很合适用来解决网络应用的问题。Erlang 一直在接触,但是没有找到合适的机会去应用到实际问题上。Erlang 缺乏一个强大的框架来支持 web 的后端开发,其他的函数式语言诸如之前提到的 Closure、Scala 等也有类似的问题。

Elixir

目前觉得 Elixir 可能符合所有这些要求。虽然它不是像 Haskell 那样的纯函数式。

第一次知道 Elixir 是 2015 年,当时觉得这个名字挺拗口的,开始关注。很久之前也玩过一小会 Erlang,但是没有应用场景,所以没有深入。真要搞精通一个技术是要花很多时间的,所以平时工作主要都还是 JavaScript。后来 Elixir / Phoenix 越来越受欢迎,在今年决定开始真正开始上手玩一玩了。

简单介绍一下。Elixir 是一个基于 Erlang VM 的开源函数式编程语言,语法类似于 Ruby。Github 上它第一次 release 的时间是 2012-5-25,是比较新的语言,到现在才四年多。目前版本 1.3.2。和 Lua 一样,是由一名巴西人(Jose Valim)发明的。它的网络开发框架 Phoenix 是 2014-5-1 发布,也很新,目前版本 v1.2.0 ,Github repo 现在有 7 千多 star。貌似要爆发的感觉。

后面会持续跟进 Elixir 和 Phoenix。希望用他们来解决些实际问题。


王垠《编程的宗派》 谈面向对象和函数式编程的优劣,写得很不错。还有这篇《数学和编程》