原文链接:http://www.csdn.net/article/2015-10-27/2826040-Elixir-Jos%C3%A9Valim
Elixir是一种运行于Erlang VM上的函数式、具有元编程特性的动态语言。它拥有灵活的语法和强大的宏系统,还具备模式匹配、通过协议(类似Clojure的方式)支持多态等功能;继承了Erlang的优点,尤其适合开发并行、分布式,以及高容错应用。Erlang之父Joe Armstrong也对Elixir赞赏有加。日前,Elixir设计者José Valim接受了CSDN专访,分享了他在设计这门语言时的感悟。
Elixir设计者,Rails核心团队成员,Plataformatec联合创始人José Valim
语言成熟需待时间酝酿
CSDN:你设计Elixir的原因是什么,希望解决哪些问题?
José Valim:Erlang VM是种神奇的软件,在过去十年中,许多公司使用它编写出了高并发、分布式和高容错性软件。Elixir的主要目标是将Erlang VM通过另一种语法和另一套工具暴露给开发者。
最终,我希望Elixir和Erlang将能共享相同的字节码和数据类型。这意味着开发者可以同时拥有Elixir的表达力,以及Erlang具备的高可靠性和高性能。
CSDN:Elixir的语法在很大程度上借鉴了Erlang和Ruby,为什么你没有选择一种更激进的变化?
José Valim:在Elixir设计初期,我知道自己需要Elixir具备宏系统,这是从Lisp中得到的启发。对于宏系统,只有在一种编程语言的语法能通过它自身的数据结构,以一种很直接的方式表达的情况下才合理。带着这个目标,我设计了一种非常简洁的语法,而后逐步增加层次,这部分灵感大多来自Ruby和Erlang中的惯用法。
由于Elixir的目的是增强Erlang,所以我在做设计决定时经常向Erlang的语法和语义靠拢,这样就可以帮助开发者更好地融入生态圈。
CSDN:我们知道一种语言的成熟可能需要经历漫长的过程。在设计的过程中,哪些部分你用心最多?
José Valim:设计一种编程语言,对耐心的考验比努力更多。首先你需要明确一系列目标,然后在你希望语言发展的方向上宽广地推进,给你自己和语言都留出更多时间,然后观察这些目标之间如何演进与调和。
倘若你试图一蹴而就,或者不对未来做打算,不为演进留出空间,就将得到一种不一致的语言——也许能实现所有目标,但这些目标之间却龃龉相抵。
CSDN:请给我们详细谈谈Elixir的设计目标。
José Valim:Elixir的设计目标可以概括为兼容性、高效率和扩展性这几部分。
之前已谈到兼容Erlang VM是Elixir的目标之一,当我们谈到Erlang这个词,可以将它分解为下面三部分:
一种函数式编程语言Erlang;
一系列设计原则,称为OTP;
Erlang虚拟机,称为EVM或BEAM。
Elixir与Erlang运行在同一种虚拟机上,并兼容OTP。不仅如此,所有Erlang生态系统中使用的工具和库,Elixir也能使用,因为在Erlang中调用Elixir没有任何性能代价,反过来也是如此。
所有Elixir代码在轻量级进程中运行,包含自己的状态,用于彼此交换信息。Erlang VM将这些进程分配到多个处理器核心中,使代码可以轻松地并行执行。
如果你编译Elixir代码,会发现CPU中的所有核心都在开动。当像Parallella这种技术变得更容易获取且成本更低廉时,你很难忽视Erlang VM所能提供的强大能力。未来Erlang VM将会被用来搭建能永久运行、能自我修复和扩展的系统。
效率很难测量,能高效开发桌面应用的编程语言却可能在数学运算领域捉襟见肘,它与你期望从事的领域、生态圈中的可用工具,以及是否能方便地创造和扩展这些工具有关。
基于这种原因,我们选择了简约的语言核心。在许多编程语言中,if、case、try这些关键词都需要专门的语法分析器,而Elixir中只有宏。这样做的好处之一是,开发者可以自己扩展语言,以适应他们自己的工作领域。宏还是Elixir元编程的构建基础:具备通过代码生成代码的能力,令开发者能摆脱烦琐的工作,创造出更强大的工具。
宏也对语法有巨大的影响,前面已经提到。尽管许多关于语言的话题一开始就会讨论语法,但在Elixir身上,从未将“简单地提供另一种不同语法”作为它的目标。
尽管基于简洁的语言核心,开发者可以构建和扩展针对自己领域的语言。但Elixir还继承了擅长并行和分布式应用的特点。在这些领域,Elixir补充了下面一些标准库:
Unicode字符串和相应的操作;
强大的单元测试框架;
更多数据类型;
多态记录;
严格和惰性枚举API;
便于脚本操作的函数,例如路径和文件系统;
一些用于编译和测试Elixir代码的项目管理工具。
此外,还有更多库、模块、协议等便于扩展的特性。
以源码为良师
CSDN:你都是通过哪些方式提高编程技能?
José Valim:我的阅读量很大。既读书,也阅读其他开发者的代码。我觉得每个人都不应该畏惧自己所使用项目的源代码。当然,我也通过在现实问题中实践来提高自己。
CSDN:Elixir的名字有典故吗?
José Valim:我很希望有,不过很可惜,这个名字其实没有特别的出处。
CSDN:Elixir已足够成熟,可以用于生产环境吗?
José Valim:Elixir确实已可以用于生产环境了,已有开发者和公司将它应用到了产品中。不过,Elixir社区的发展速度很快,所以开发者还需要跟上语言发展的步伐。
CSDN:在设计和发展Elixir的过程中,你有哪些经验可以与读者分享?
José Valim:我最喜欢的一条建议是“Use the source, Luke!”(《星球大战》中的一句话)。阅读你所使用的工具和项目的源代码会让你变成更好的程序员,也会让你更好地理解它们,还会让你对在社区中贡献更近一步。公开软件的源代码是一件美好的事情,它曾经(也依然)是我最重要的老师。
网友评论